【发布时间】:2018-12-19 13:36:28
【问题描述】:
我正在尝试使用以下代码抓取 google 搜索结果。我想获取结果第一页的标题和 url,然后继续抓取搜索结果的下一页。 这是我刚开始编写的代码示例:
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 的行为就像它们不存在一样。 为什么会发生这一切?
【问题讨论】:
-
当你打印这个
print(page_soup.title)时你看到了什么? -
这是打印的内容:
donald trump - Αναζήτηση Google -
试试这个以获得第一个标题和链接
print(page_soup.select_one("h3.r a").text,page_soup.select_one("h3.r a").get("href"))。 -
它有效,但由于某种原因,我不采用第一个而是第二个搜索结果。当我使用上面提到的我自己的“解决方案”时也会发生同样的情况。由于某种原因,第一个搜索结果无法访问。
标签: python python-3.x web-scraping