Python 从google搜索中提取结果数

Python 从google搜索中提取结果数,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正在写一个网页刮板来提取谷歌搜索结果的数量,它出现在搜索结果页面的左上角。我已经写了下面的代码,但我不明白为什么短语_extract是None。我想提取短语“大约12010000000个结果”。我犯了什么错误?可能没有正确解析HTML import requests from bs4 import BeautifulSoup def pyGoogleSearch(word): address='http://www.google.com/#q=' newword=add

我正在写一个网页刮板来提取谷歌搜索结果的数量,它出现在搜索结果页面的左上角。我已经写了下面的代码,但我不明白为什么短语_extract是None。我想提取短语“大约12010000000个结果”。我犯了什么错误?可能没有正确解析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')

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

所以看起来是这样的:

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(',',''))

你实际上使用了错误的url来查询谷歌的搜索引擎。您应该使用
http://www.google.com/search?q=

所以看起来是这样的:

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(',',''))

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

另外,请确保您使用的是
用户代理
,因为谷歌可以将您的脚本视为平板电脑
用户代理
(不同的东西),具有不同的
类、id
标记等。这可能是您的输出为空的原因

以下是代码,请查看搜索结果的数量:

输出:

About 3,890,000,000 results
4210000000
或者,您可以使用查找这些结果

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)
输出:

About 3,890,000,000 results
4210000000
Discrailmer,我为SerpApi工作


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

另外,请确保您使用的是
用户代理
,因为谷歌可以将您的脚本视为平板电脑
用户代理
(不同的东西),具有不同的
类、id
标记等。这可能是您的输出为空的原因

以下是代码,请查看搜索结果的数量:

输出:

About 3,890,000,000 results
4210000000
或者,您可以使用查找这些结果

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)
输出:

About 3,890,000,000 results
4210000000
Discrailmer,我为SerpApi工作



而不是刮擦,你应该考虑使用他们的不是免费的一定量。但是你知道为什么API的结果与这种方法不同吗?API是一种比刮削更有前途的方法。站点所有者不会等待通知您更改,因此您的代码可能会在某个特定时间失效。然而,API得到了很好的开发和维护,响应时间比抓取快得多。@Gahan这就是为什么当我用beautiful soup抓取时,我得到的结果与在google和alos API中搜索的结果不同的原因?这意味着我通过这三种不同的方法得到了三种不同的结果,因为您使用id或标记类来刮取数据,它们可能会更改它或嵌套在另一个标记中。它只是html结构。虽然你有一个API的文档,而不是刮,你应该考虑使用他们的不是免费的一定数额。但是你知道为什么API的结果与这种方法不同吗?API是一种比刮削更有前途的方法。站点所有者不会等待通知您更改,因此您的代码可能会在某个特定时间失效。然而,API得到了很好的开发和维护,响应时间比抓取快得多。@Gahan这就是为什么当我用beautiful soup抓取时,我得到的结果与在google和alos API中搜索的结果不同的原因?这意味着我通过这三种不同的方法得到了三种不同的结果,因为您使用id或标记类来刮取数据,它们可能会更改它或嵌套在另一个标记中。它只是html结构。然而,您有一个API文档。谢谢!它起作用了!但这里有两个问题。首先,当我打印短语_extract时,它向我显示:当类不是“sd”时,大约有51500000个结果。第二个问题是,结果51500000与我在谷歌搜索时看到的数字不同。我用窗口下方的整个xml代码图像编辑了我的问题。这张图片出现在我问题中的“完整图像描述”中。有人知道如何从文本中提取51500000的确切数字吗?我使用text.split,但它给了我一个错误:ValueError:invalid literal for int(),以10为基数:'317000000'@RoseA我添加了一个获取整数值的片段谢谢你,如果你知道我其他问题的答案,如果你能回答我将不胜感激谢谢!它起作用了!但这里有两个问题。首先,当我打印短语_extract时,它向我显示:当类不是“sd”时,大约有51500000个结果。第二个问题是,结果51500000与我在谷歌搜索时看到的数字不同。我用窗口下方的整个xml代码图像编辑了我的问题。这张图片出现在我问题中的“完整图像描述”中。有人知道如何从文本中提取51500000的确切数字吗?我使用text.split,但它给了我一个错误:ValueError:invalid literal for int(),以10为基数:'317000000'@RoseA我添加了一个获取整数值的片段谢谢你,如果你知道我其他问题的答案,如果你能回答我的问题,我将不胜感激