Python网页抓取给出了错误的源代码
Posted
技术标签:
【中文标题】Python网页抓取给出了错误的源代码【英文标题】:Python web scraping gives wrong source code 【发布时间】:2014-04-06 21:05:37 【问题描述】:我想从亚马逊提取一些数据(链接在下面的代码中)
这是我的代码:
import urllib2
url="http://www.amazon.com/s/ref=sr_nr_n_11?rh=n%3A283155%2Cn%3A%2144258011%2Cn%3A2205237011%2Cp_n_feature_browse-bin%3A2656020011%2Cn%3A173507&bbn=2205237011&sort=titlerank&ie=UTF8&qid=1393984161&rnid=1000"
webpage=urllib2.urlopen(url).read()
doc=open("test.html","w")
doc.write(webpage)
doc.close()
当我打开test.html时,我的页面内容与互联网上的网站不同。
【问题讨论】:
“不同”是什么意思? 你不想使用亚马逊的公共 API 吗? 【参考方案1】:页面涉及javascript执行。
urllib2.urlopen(..).read()
只需读取 url 内容。所以它们是不同的。
要获得相同的内容,您需要使用可以处理 javascript 的库。
例如,以下代码使用selenium
:
from selenium import webdriver
url = 'http://www.amazon.com/s/ref=sr_nr_n_11?...161&rnid=1000'
driver = webdriver.Firefox()
driver.get(url)
with open('test.html', 'w') as f:
f.write(driver.page_source.encode('utf-8'))
driver.quit()
【讨论】:
【参考方案2】:完成 falsetru 的回答:
另一种解决方案是使用python-ghost。它基于 Qt。安装起来要重得多,所以我也建议 Selenium。
使用 Firefox 将在脚本执行时打开它。如果不想在途中使用它,请使用 PhantomJS:
apt-get install nodejs # you get npm, the Node Package Manager
npm install -g phantomjs # install globally
[…]
driver = webdriver.PhantomJS()
【讨论】:
以上是关于Python网页抓取给出了错误的源代码的主要内容,如果未能解决你的问题,请参考以下文章
用Python 抓取的UTF8网页无法decode('utf-8')