下载的请求HTML与Chrome的Devtools不同

时间:2019-06-06 21:27:22

标签: python web-scraping python-requests

我正在尝试使用“用Python自动完成无聊的东西”的第11章中的一些代码。但是,其中一个程序lucky.py似乎对我不起作用。 该程序应该使用请求模块获取特定主题的Google搜索页面,然后在不同选项卡中打开前5个搜索结果。 当我查看搜索页面的Chrome Devtools时,对我来说很清楚,每个搜索结果链接(<a>标记)都在具有“ r”类的div中。但是,当我请求页面时,将下载的HTML发送到.txt文件并进行浏览,我发现搜索结果链接的代码完全不同。他们为什么不同? devtools的全部目的不是要快速检出网页中特定元素的HTML而不需要遍历整个源代码的方法吗?

以前,我尝试进行soup.select('.r a')的工作是因为每个搜索页面的div中的搜索结果链接都具有类'r'。那没用。返回的列表始终为空。因此,为了进行故障排除,我将请求的页面发送到了文件中,并找到了链接的位置。文本文件中的链接均导致错误404。我不知道发生了什么。

Devtools代码:

<div class="r">
<a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/" ping="/urlsa=t&amp;source=web&amp;rct=j&amp;url=https://www.crummy.com/software/BeautifulSoup/bs4/doc/&amp;ved=2ahUKEwjj1vTx3NXiAhVPinAKHersDyoQFjAAegQIAhAB"><h3 class="LC20lb">Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation</h3><br><div class="TbwUpd"><cite class="iUh30">https://www.crummy.com/software/BeautifulSoup/bs4/doc/</cite>

现在这是我在请求的页面中找到链接的地方:

<div class="jfp3ef"> 
<a href="/urlq=https://www.crummy.com/software/BeautifulSoup/bs4/doc/&amp;sa=U&amp;ved=2ahUKEwjMjPST2tXiAhU463MBHWjMA0UQFjAAegQIChAB&amp;usg=AOvVaw05aFh5uUJ_Z2oREgu8fzfA">

这是我用来获取页面的代码:

res = requests.get('https://www.google.com/search?q=' + ' '.join(['beautiful', 'soup'])
bs = open('soup.txt', 'wb')
for chunk in res.iter_content(100000):
    bs.write(chunk)

1 个答案:

答案 0 :(得分:0)

几乎可以肯定,您需要关闭javascript才能看到程序中的元素。 https://github.com/maximelebreton/quick-javascript-switcher您可以在chrome扩展程序/附件页面上找到它。这将允许您关闭页面上的javascript。在此之后,您会注意到它的外观,页面看上去会有所不同,并且您的链接很可能位于不同的元素/类中。

之后,您应该能够找到使用devtool定位元素的正确方法。

由于Google放置了一些cookie,这些链接可能无法正常工作?但是,事实上,您得到的列表中没有链接,这使我认为您没有获得正确的CSS选择器。