从Google搜索中提取结果数

时间:2018-11-06 17:46:17

标签: python web-scraping beautifulsoup

我正在编写一个网络抓取工具,以提取显示在搜索结果页面左上方的google搜索中的搜索结果数。我已经在下面编写了代码,但我不明白为什么phrase_extract为None。我想提取短语“大约12,010,000,000个结果”。我在哪部分出错?可能无法正确解析HTML?

import requests
from bs4 import BeautifulSoup

def pyGoogleSearch(word):   
    address='http://www.google.com/#q='
    newword=address+word
    #webbrowser.open(newword)
    page=requests.get(newword)
    soup = BeautifulSoup(page.content, 'html.parser')
    phrase_extract=soup.find(id="resultStats")
    print(phrase_extract)

pyGoogleSearch('world')

example

2 个答案:

答案 0 :(得分:2)

您实际上使用了错误的网址来查询Google的搜索引擎。您应该使用http://www.google.com/search?q=<query>

所以看起来像这样:

def pyGoogleSearch(word):
    address = 'http://www.google.com/search?q='
    newword = address + word
    page = requests.get(newword)
    soup = BeautifulSoup(page.content, 'html.parser')
    phrase_extract = soup.find(id="resultStats")
    print(phrase_extract)

您也可能只需要该元素的文本,而不是元素本身,因此您可以执行类似的操作

phrase_text = phrase_extract.text

或获取为整数的实际值:

val = int(phrase_extract.text.split(' ')[1].replace(',',''))

答案 1 :(得分:0)

您还可以尝试查看上面 div 的输出。有时它会显示输出。

另外,请确保您使用的是 user-agent,因为谷歌可以将您的脚本视为具有不同 user-agent 标签的平板电脑 classes, id(不同的东西),等等。这可能是您的输出为 [] - 空的原因。

这是查看搜索结果数量的代码和replit.com

from lxml import html
import requests

headers = {
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

response = requests.get('https://www.google.com/search?q=beautiful+cookies',
                        headers=headers,
                        stream=True)

response.raw.decode_content = True

tree = html.parse(response.raw)

# lxml is used to select element by XPath
# Requests + lxml: https://stackoverflow.com/a/11466033/1291371
result = tree.xpath('//*[@id="result-stats"]/text()')[0]

print(result)

输出:

About 3,890,000,000 results

或者,您可以使用 SerpApi Google Search API 来查找这些结果。

JSON 的一部分:

"search_information": {
 "organic_results_state":"Results for exact spelling",
 "total_results": 3890000000,
 "time_taken_displayed": 0.65,
 "query_displayed": "beautiful cookies"
}

要集成的代码:

import os
from serpapi import GoogleSearch

params = {
    "engine": "google",
    "q": "beautiful cookies",
    "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

result = results["search_information"]['total_results']
print(result)

输出:

4210000000
<块引用>

Discrailmer,我为 SerpApi 工作。