Python请求与urllib2

Python请求与urllib2,python,web-scraping,urllib2,python-requests,partial,Python,Web Scraping,Urllib2,Python Requests,Partial,我已经多次使用请求库,我知道它有很多优点。但是,我试图检索以下维基百科页面: 和requests.get部分检索它: response = requests.get('https://en.wikipedia.org/wiki/Talk:Land_value_tax', verify=False) html = response.text 我使用urllib2和urllib2.urlopen进行了尝试,它完全检索到了相同的页面: html = urllib2.urlopen('https:/

我已经多次使用请求库,我知道它有很多优点。但是,我试图检索以下维基百科页面:

和requests.get部分检索它:

response = requests.get('https://en.wikipedia.org/wiki/Talk:Land_value_tax', verify=False)
html = response.text
我使用urllib2和urllib2.urlopen进行了尝试,它完全检索到了相同的页面:

html = urllib2.urlopen('https://en.wikipedia.org/wiki/Talk:Land_value_tax').read()
有人知道为什么会发生这种情况,以及如何使用请求解决它吗


顺便说一句,看看这篇文章被浏览的次数,我意识到人们有兴趣了解这两个图书馆之间的差异。如果有人知道这两个库之间的其他差异,如果他们编辑此问题或发布答案并添加这些差异,我将不胜感激。

在我看来,问题在于目标页面上的脚本。js驱动的内容在这里呈现(特别是我发现了对的调用)。因此,您需要查看web嗅探器来识别它:

怎么办?如果您想检索整个页面内容,最好在页面javascript中插入任何正在计算(评估)的库。阅读更多

更新 我对从MediaWiki检索整个页面和统计信息或JS库不感兴趣。我只需要页面的全部内容(通过抓取,而不是MediaWiki API)


问题在于,这些对其他资源(包括mediawiki)的js调用使得向客户端呈现整个页面成为可能。但由于库不支持JS执行,因此JS未执行=>页面部分未从其他资源加载=>目标页面不完整

打印请求。获取(“https://en.wikipedia.org/wiki/Talk:Land_value_tax)文本
对我有用。您是否传递了任何额外的参数?@user,请将您有问题的程序减少到演示错误的尽可能短的完整程序(我认为4-5行可以演示问题),然后将整个程序复制粘贴到您的问题中。有关更多信息,请参阅。根据您的请求,我在问题中添加了代码。顺便说一句,@fasouto,如果您查看结果,您将看到文档的结尾没有完全检索到。如果我从您的
请求中删除
标题,它们对我来说是相等的。获取
版本。通过比较它们的长度,而不查看它们的类型,您不会认为它们是不同的吗?让我更清楚一点:如果您将长度与
len()
进行比较,而没有注意到
urlib2
结果是一个UTF-8编码的字节
str
,而
请求。get
结果是一个
unicode
,然后,对于
请求,任何包含非ASCII字符的页面将显示一个稍小的数字。get
。这不是“部分反应”。一切正常。谢谢你的回答。这很有帮助。但是,我对从MediaWiki检索整个页面和统计信息或JS库不感兴趣。我只需要页面的全部内容(通过抓取,而不是MediaWiki API)。更有趣的是,当您请求小页面时,这个问题不会发生。只有当页面大于特定大小时才会发生这种情况。@user2521204只是好奇,具体大小是多少?@user2521204,在
请求
库中是否设置了任何限制?@Karl,很抱歉我的回复太晚了。事实上,我收到过不同的大号,如142105、16110、131760……正如你所看到的,它们彼此完全不同,我不认为我们可以得出大小有限制的结论。但是,在所有这些情况下,虽然urllib2检索到了完整的内容,但requests.get检索到了部分内容。从另一个角度看,我在其他具有类似长度的页面(1085403043340085,…)上做了同样的事情,it requests.get完全检索它们。比较这些数字表明,我们应该对@Igor Savinkin解释的类似问题持怀疑态度,但我不理解为什么urllib2会完全检索它们。