繁体   English   中英

如何抓取Google搜索结果页?

[英]How to scrape a google search results page?

我正在尝试使用以下代码抓取Google搜索结果。 我想获取结果第一页的标题和网址,然后继续抓取搜索结果的下一页。 这是我刚刚开始编写的代码示例:

from urllib.request import urlopen as uReq
import urllib.request
from bs4 import BeautifulSoup as soup


paging_url = "https://www.google.gr/search?q=donald+trump&ei=F91FW8XBGYjJsQHQwaWADA&start=110&sa=N&biw=811&bih=662"

req = urllib.request.Request("https://www.google.gr/search?q=donald+trump&ei
=F91FW8XBGYjJsQHQwaWADA&start=110&sa=N&biw=811&bih=662",headers = {'User-Agent':"Magic Browser"})

UClient = uReq(req)  # downloading the url
page_html = UClient.read()
UClient.close()

page_soup = soup(page_html, "html.parser")

我注意到所有Google搜索结果都有一个名为“ g”的通用类。 所以我写了以下命令:

results= page_soup.findAll("div",{"class":"g"})

但是经过测试后,获得的结果与访问初始网址时看到的结果不同。

此外,还有一些div标签,例如:

<div data-hveid="38" data-ved="0ahUKEwjGp7XEj5fcAhXMDZoKHRf8DJMQFQgmKAAwAA">

<div class="rc">

在BeautifulSoup产生的树中看不到。 这意味着我无法使用findAll函数在这些标签内定位对象,因为BeautifulSoup的行为就像它们不存在一样。 为什么这一切都会发生?

我绝对不会直接通过原始http请求抓取Google。 Google可以很容易地检测到它。 为了不被发现,我建议使用带有铬的自动浏览器,例如Chrome。

在您的示例中,问题在于Google为其SERP页面提供了不同的HTML版本,因为它检测到低级别的HTTP抓取。

有开放源代码库可以处理所有困难的抓取部分。 例如GoogleScraper ,它是用Python3编写的工具,它支持三种不同的抓取模式:Http原始抓取,硒模式(使用实际浏览器)和异步http模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM