首页 > 编程问答 >用 python 抓取谷歌结果统计

用 python 抓取谷歌结果统计

时间:2024-07-21 13:06:28浏览次数:17  
标签:python web-scraping beautifulsoup urllib2

我想从谷歌获取关键字的估计结果数。我使用 Python3.3 并尝试使用 BeautifulSoup 和 urllib.request 完成此任务。到目前为止,这是我的简单代码

def numResults():
try:
    page_google = '''http://www.google.de/#output=search&sclient=psy-ab&q=pokerbonus&oq=pokerbonus&gs_l=hp.3..0i10l2j0i10i30l2.16503.18949.0.20819.10.9.0.1.1.0.413.2110.2-6j1j1.8.0....0...1c.1.19.psy-ab.FEBvxrgi0KU&pbx=1&bav=on.2,or.r_qf.&bvm=bv.48705608,d.Yms&'''
    req_google = Request(page_google)
    req_google.add_header('User Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1')
    html_google = urlopen(req_google).read()
    soup = BeautifulSoup(html_google)
    scounttext = soup.find('div', id='resultStats')
except URLError as e:
    print(e)
return scounttext

我的问题是我的汤变量以某种方式进行了编码,并且我无法从中获取任何信息。所以我返回 None 因为 soup.find 不起作用。

我做错了什么以及如何提取想要的结果统计信息? 非常感谢!


由于 Google 搜索结果页面是动态生成的,因此无法使用 urllib 之类的库来抓取它,因为它不会执行返回的 JavaScript 代码。为了从 Google 搜索结果页面中检索结果数量,需要使用像 requests_html 这样的库,该库能够呈现 JavaScript 并模拟网页浏览器。

下面是如何使用 requests_html 抓取 Google 搜索结果计数的示例:

from requests_html import HTMLSession

def get_num_results(query):
  """获取 Google 搜索的结果数量。

  Args:
    query: 要搜索的查询。

  Returns:
    Google 搜索的结果数量,或者在发生错误时返回 None。
  """
  url = f"https://www.google.com/search?q={query}"
  session = HTMLSession()
  try:
    response = session.get(url)
    response.html.render() # 渲染 JavaScript 内容
    result_stats = response.html.find('#result-stats', first=True)
    if result_stats:
      return result_stats.text
    else:
      return None
  except Exception as e:
    print(f"发生错误: {e}")
    return None

# 示例用法
query = "pokerbonus"
num_results = get_num_results(query)

if num_results:
  print(f"查询“{query}”的搜索结果数量为:{num_results}")
else:
  print(f"无法检索查询“{query}”的结果数量。")

此代码执行以下操作:

  1. 导入 HTMLSession 类: 这允许创建可以抓取网站的会话。
  2. 定义 get_num_results 函数:
  3. 它使用 requests_html 库获取给定查询的 Google 搜索结果页面。
  4. 它使用 response.html.render() 方法呈现 JavaScript 内容。这对于获取动态生成的内容至关重要。
  5. 它使用 .find('#result-stats', first=True) 方法查找包含结果数量的 HTML 元素。
  6. 它从 HTML 元素中提取文本并返回。如果出现任何错误,它将返回 None
  7. 示例用法:
  8. 它定义了一个查询并调用 get_num_results 函数。
  9. 它打印结果数量或如果出现错误则打印一条消息。

请注意: 抓取网站(尤其是 Google)时,请务必遵循其服务条款。 Google 对抓取施加了限制,因此请务必适度使用此代码,并在每次请求之间添加延迟,以避免的 IP 地址被阻止。

标签:python,web-scraping,beautifulsoup,urllib2
From: 17496760

相关文章

  • 【python】Python高阶函数--sorted函数的高阶用法解析与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 超详细Python教程——异步任务和定时任务
    异步任务和定时任务在Web应用中,如果一个请求执行了耗时间的操作或者该请求的执行时间无法确定,而且对于用户来说只需要知道服务器接收了他的请求,并不需要马上得到请求的执行结果,这样的操作我们就应该对其进行异步化处理。如果说使用缓存是优化网站性能的第一要义,那么将耗时......
  • Python 中的模 (%) 运算符如何处理负数?
    %运算符在Python中到底是如何工作的,特别是在涉及负数时?例如,为什么-5%4求值为3,而不是-1?在Python中,模运算符(%)遵循以下规则:a%b=a-(b*floor(a/b))其中:a是被除数。......
  • 如何使用 python 更新设备孪生?
    我目前正在尝试使用python更新设备孪生中的属性。但由于SSL错误而无法执行此操作。下面是代码fromazure.iot.hubimportIoTHubRegistryManagerimportcertifiimportssl#ConnecttoIoTHubandsendmessagetodeviceCONNECTION_STRING="HostName=iothub-j......
  • 【Python将字符串连接在一起】
    当然,Python是一个功能丰富且灵活的语言,有许多技巧和最佳实践可以帮助你更有效地编写代码。以下是一些常见的Python技巧:列表推导式(ListComprehensions):这是一种简洁的构建列表的方法。它比使用循环更加清晰和Pythonic。[x*2forxinrange(5)]#输出:[0,2,4,6,......
  • 我心中的王者:Python-第2章 认识变量与基本数学运算
    我心中的王者:Python-第2章认识变量与基本数学运算本章将从基本数学运算开始,一步一步讲解变量的使用与命名,接着介绍Python的算术运算。2-1用Python做计算假设读者到麦当劳打工,一小时可以获得120元时薪,如果想计算一天工作8小时,可以获得多少工资?我们可以用计算器执行“1......
  • 【Dison夏令营 Day 25】用Python写个2048
    在本文中,我们将用python代码和逻辑来设计一款你经常在智能手机上玩的2048游戏。如果您对该游戏不熟悉,强烈建议您先玩一下该游戏,以便了解其基本功能。如何玩2048.NET?1.有一个4*4的网格,可以填入任何数字。一开始,随机填入两个2的单元格。其余单元格为空。我们......
  • python入门基础——新手必看
    前言随着人工智能,大数据的发展。python是当前时代最流行,可以在数据处理、web开发、人工智能等多个领域。它的语法简洁、开发效率高、可移植性强,并且可以和其他变成语言(比如C++)轻松衔接,本文主要讲述一些python的变量,基本数据类型,输入、输出,数据类型的转换,运算符等一些必需的......
  • python中逗号运算符的含义
    我理解了python中逗号运算符的简单概念。例如,x0,sigma=0,0.1表示x0=0,sigma=0.1。但我获得了一个代码,其中有一行如下所示。y,xe=np.histogram(np.random.normal(x0,sigma,1000))其中y和xe的输出如下。yOut[10]:array([3,17,58,136,216,25......
  • 【科大讯飞笔试题汇总】2024-07-20-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/
    ......