urllib2.urlopen()中缺少内容

时间:2014-01-15 10:34:58

标签: python python-2.7 urllib2

通过发送请求解析网页,

request = urllib2.Request(urllink, None, {'User-Agent':'Mosilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'})
print request
urlfile = urllib2.urlopen(request)
page = urlfile.read()
soup = BeautifulSoup(page)

这里的问题是来自urllib2.urlopen()的响应中缺少网页中的一些内容。如果我保存页面,我会收到所有内容。 我注意到还有一个请求通过ajax调用进入网页。 python中是否有任何方法可以通过发送请求来获取整个页面

1 个答案:

答案 0 :(得分:0)

AJAX是异步JS和XML - 它意味着你要GET文档,并且在浏览器加载后,一些内容被动态地加载并注入到DOM中。

这对你意味着什么?你有获得完整文档所需的所有信息,但是......你可能无法执行下载和注入动态数据的JS。

如何绕过这个?我还没有找到任何用于python的JS引擎,但我还在搜索。相反,您可以使用一些使用Selenium的浏览器引擎(它是与您的计算机上安装的浏览器通信的库,允许您模拟用户操作,如点击,输入等)。然后,您可以在这些操作之后检查DOM并执行其他操作。

其他方式是使用Jython(因为你正在使用p2.7,它应该兼容)并利用Rhino或任何其他Java引擎来执行此代码。