我正在使用 Python 请求抓取 Wikia 页面。但有一个问题:requests 请求没有给我相同的 HTML因为我的浏览器具有完全相同的页面。
为了比较,这是 Firefox 给我的页面 https://www.dropbox.com/s/oxj3br97thq7ulr/yokai-browser.html?dl=0, and 这是页面请求获取 https://www.dropbox.com/s/gwnqtmrkr5zxgmn/yokai-pythonrequests.html?dl=0(下载它们进行查看 - 抱歉,没有简单的方法可以直观地托管来自另一个站点的一些 HTML)。
您会注意到一些差异(超级不友好的差异 https://www.diffchecker.com/ujzkg7cq)。有一些小事情,例如属性顺序不同等,但也有一些非常非常大的事情。最重要的是缺少最后六个<img>
s,以及整个导航和页脚部分。即使在原始 HTML 中,页面看起来也像是突然被切断了。
为什么会发生这种情况,有办法解决吗?我已经想了很多事情,但都没有结果:
- 请求标头干扰?不,我尝试复制浏览器发送的标头,
User-Agent
和所有的一样,1:1 变成 requests 请求,但没有任何改变。
- JavaScript 加载 HTML 后加载内容?不。即使禁用了 JS,Firefox 也会给我提供“良好”的页面。
- 呃……好吧……还能有什么呢?
如果您知道这种情况可能发生的方式以及解决方法,那就太棒了。谢谢你!
我有一个类似的问题:
- 与 Python 和浏览器相同的标头
- JavaScript 绝对排除了这个原因
为了解决这个问题,我最终更换了requests图书馆urllib.请求.
基本上,我替换了:
import requests
session = requests.Session()
r = session.get(URL)
with:
import urllib.request
r = urllib.request.urlopen(URL)
然后就成功了。
也许其中一个图书馆正在幕后做一些奇怪的事情?不确定这是否适合您。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)