如何在Python中使用网页抓取API获得Google搜索结果

embedded/2024/9/23 3:28:01/

SERP是搜索引擎结果页的缩写,它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序,把最能解决我们需求的页面展示给我们,企业会非常关注结果页的排序,也就是本企业内容的自然排名情况。手工研究这个结果,非常困难,一般都会借助一些成熟产品、或者集成SERP API接口,例如:

  • Serpapi-Google搜索,快速、简单和完整的抓取Google、百度、Bing、易趣、雅虎、沃尔玛等和其他搜索引擎的数据
  • Serpdog搜索引擎数据抓取,该API为企业和开发者提供了一种迅速且高效的途径来搜集搜索引擎的数据,可在线体验
  • Bright Data – SERP API,通过该API,用户可以获取搜索结果、排名信息、广告数据、关键词建议等,帮助他们深入了解市场动态、分析竞争对手、调整SEO策略等。

本文讲述另外一种方法,如何通过网页抓取API来获取结果,而不是直接使用SERP API

什么是网页抓取API

网页抓取(即网络抓取、网站抓取、网络数据提取)是指从目标网站收集公共网络数据的自动化流程。不必手动采集数据,使用网页抓取工具几秒钟就可以获取大量信息。

网页抓取API通常用于分析竞争对手、市场趋势,获取消费者行为的宝贵见解等场景,是企业营销自动化的必需品。

网页抓取API是否存在风险?可以阅读《网页抓取API是否存在风险》一文。

定制化获取SERP信息的过程

本文主要用Scraperbox 公司提供的网页抓取API示例使用过程。一般网页抓取API包括如下几个过程:抓取 –> 解析 –> 结构化存储 –>数据分析。

集成网页抓取API

对于此示例,让我们创建一个调用 ScraperBox API 的 Python 程序,确保YOUR_API_KEY用您的 API 密钥替换:

import urllib.parseimport urllib.requestimport sslssl._create_default_https_context = ssl._create_unverified_context# Urlencode the URLurl = urllib.parse.quote_plus("https://www.google.com/search?q=用幂简集成搜索API")# Create the query URL.query = "https://api.scraperbox.com/scrape"query += "?api_key=%s" % "YOUR_API_KEY"query += "&url=%s" % url# Call the API.request = urllib.request.Request(query)raw_response = urllib.request.urlopen(request).read()html = raw_response.decode("utf-8")print(html)

谷歌和大多数网站一样,并不太喜欢自动化程序获取搜索结果页面。

一个解决方案是通过设置正常的标题来掩盖我们是自动化程序的事实User-Agent

...request = urllib.request.Request(query)# Set a normal User Agent headerrequest.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36')raw_response = urllib.request.urlopen(request).read()# Read the repsonse as a utf-8 stringhtml = raw_response.decode("utf-8")print(html)request = urllib.request.Request(query)

用户BeautifulSoup解析数据

想要从页面中提取实际的搜索结果。先要弄清楚如何访问搜索结果,启动了 Chrome 并检查了 Google 搜索结果页面:

我们可以使用这些信息通过 BeautifulSoup 提取搜索结果。

# Construct the soup objectsoup = BeautifulSoup(html, 'html.parser')# Find all the search result divsdivs = soup.select("#search div.g")for div in divs:# For now just print the text contents.print(div.get_text() + "\n\n")

当我检查页面时,我发现搜索标题包含在h3标签中。我们可以利用这些信息来提取标题。

# Find all the search result divsdivs = soup.select("#search div.g")for div in divs:# Search for a h3 tagresults = div.select("h3")# Check if we have found a resultif (len(results) >= 1):# Print the titleh3 = results[0]print(h3.get_text())</code></pre>

按此方式解析其它要素。

其它两个步骤比较简单,不再讲解。

抓取大量页面时,被拦截怎么办?

Google 很快就会发现这是一个机器人并做出 IP拦截 。

方案一:以非常稀疏的方式进行抓取,并在每次请求之间等待 10 秒。但是,如果您需要抓取大量搜索查询,那么这不是最佳解决方案。

方案二:另一个解决方案是购买 IP代理服务器。这样你就可以从不同的 IP 地址抓取数据。但这里又有一个问题。很多人想抓取 Google 搜索结果,因此大多数代理已被 Google 屏蔽。

方案三:再一种方法是购买住宅IP代理,这些 IP 地址与真实用户无法区分。


http://www.ppmy.cn/embedded/88381.html

相关文章

终于知道深度学习机器学习里的微积分需要学哪些知识了

1. 导数 (Derivatives) 在梯度下降法中使用导数来更新模型参数。 示例 使用Python和NumPy实现简单的线性回归梯度下降&#xff1a; 2. 偏导数 (Partial Derivatives) 在神经网络中使用偏导数来计算每个参数的梯度。 示例 使用Python和NumPy实现简单的神经网络反向传播&am…

网络安全防御【IPsec VPN搭建】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤&#xff1a; 修改双机热备的为主备模式&#xff1a; 2、配置交换机LSW6新增的配置&#xff1a; 3、防火墙&#xff08;FW4&#xff09;做相关的基础配置&#xff1a; 4、搭建IPsec VPN通道 &#xff08;1…

动手学强化学习 第 18 章 离线强化学习 训练代码

基于 https://github.com/boyu-ai/Hands-on-RL/blob/main/%E7%AC%AC18%E7%AB%A0-%E7%A6%BB%E7%BA%BF%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0.ipynb 理论 离线强化学习 修改了警告和报错 运行环境 Debian GNU/Linux 12 Python 3.9.19 torch 2.0.1 gym 0.26.2 运行代码 CQL.…

【计算机视觉】基本概念和应用

计算机视觉&#xff1a;基本概念和应用 目录 引言计算机视觉的基本概念 图像处理与图像分析特征提取与表示机器学习与深度学习 计算机视觉的关键技术 图像分类目标检测图像分割姿态估计图像生成与风格迁移 计算机视觉的应用 自动驾驶医疗影像智能监控增强现实与虚拟现实 计算…

面对不断更新的硬件技术,安卓系统怎样优化性能以适配各类新型设备?

安卓系统通过一系列的优化措施来适配各类新型设备并提升性能。下面是一些常见的优化策略&#xff1a; 各版本的安卓系统都会针对新的硬件技术进行优化&#xff0c;以获得更好的性能和稳定性。每个新版本都会针对新的处理器架构、图形芯片和其他硬件特性进行优化。 安卓系统会根…

MIGO 常用移动类型

MIGO的移动类型&#xff1a; 101&#xff1a;可以指采购订单收货和生产订单收货&#xff0c;在MB51中可以通过移动标识来进行区分。B指采购订单。F指生产订单。 122&#xff1a;采购订单退货。通过A02 物料凭证进行退货后&#xff0c;系统自动带出122的移动类型。 161&#xf…

Android 更换applicationId 后 微信没有回调

1、解决办法&#xff08;代码如下&#xff09;&#xff1a; 使用 <activity-alias>: 这是一个用于定义活动别名的元素。活动别名可以让您为已经定义的活动提供一个别名&#xff0c;从而可以通过别名启动原来的活动。 <activityandroid:name".wxapi.WXEntryActiv…

MuRF代码阅读

对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像&#xff0c;适用于 Transformer 的32 倍数&#xff0c; 其中 焦距 f 不变化&#xff0c;只改变 cx,cy.MuRF 直接对图像进行 插值&#xff0c;合成理想的 size. 根据 ori_size 和 inference_size…