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')

用python抓取的网页保存后为啥乱码?

如何用python抓取这个网页的内容?

python抓取网页内容时出现如下错误应该怎么办?

我想用python抓取网页里的图片,地址,商铺名,电话号码,怎么写代码

Python3简单爬虫抓取网页图片