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

news2025/1/12 13:31:15

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.parse

import urllib.request

import ssl

ssl._create_default_https_context = ssl._create_unverified_context



# Urlencode the URL

url = 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 header

request.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 string

html = raw_response.decode("utf-8")



print(html)request = urllib.request.Request(query)

用户BeautifulSoup解析数据

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

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

# Construct the soup object

soup = BeautifulSoup(html, 'html.parser')



# Find all the search result divs

divs = 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 divs

divs = soup.select("#search div.g")

for div in divs:

    # Search for a h3 tag

    results = div.select("h3")



    # Check if we have found a result

    if (len(results) >= 1):



        # Print the title

        h3 = results[0]

        print(h3.get_text())</code></pre>

按此方式解析其它要素。

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

革新IT架构管理,宝兰德全新中间件统一管理平台助力企业数字化转型

近期&#xff0c;宝兰德在金融行业科技盛会“2024中国国际金融展”上正式发布了拳头产品「中间件统一管理平台MCP2.0」&#xff0c;旨在推动业务与中间件解耦&#xff0c;解决中间件管理中的版本不统一、自动化程度低、监控不完善、运维效率低、管理分散等问题&#xff0c;实现…

8月1日学习笔记 java环境安装以及tomcat配置

一&#xff0c;java环境安装 1. 效果 2. 步骤 1. 下载 jdk22 # 官网地址 https://www.oracle.com/cn/java/technologies/download s/ wget https://download.oracle.com/java/22/latest/jdk- 22_linux-x64_bin.tar.gz 2. 解压 tar -zxvf jdk-22.2.tar.gz 3. 移动到 us…

快速搞定分布式Kafka

本文从kafka中的实际应用场景分析&#xff0c;讲述kafka的一些基本概念。再讲述zookeeper集群环境的构建&#xff1b;kafka的搭建以及脚本文件编写&#xff1b;最后是一个快速入门的demo.内容会比较多&#xff0c;希望大家能有所收获&#xff01; 1.Kafka(MQ)实战应用场景剖析…

linux系统ShellCheck检查shell脚步语法正确的工具

目录 ShellCheck 安装ShellCheck 、dnf、yum 源代码编译 步骤如下&#xff1a; 示例命令&#xff1a; 方法三&#xff1a;使用其他第三方仓库、COPR 仓库 假设 ShellCheck 输出如下&#xff1a; 分析输出 修改脚本 再次运行 ShellCheck 1. Shell 脚本最佳实践 主题…

vcpkg install libtorch[cuda] -allow-unsupported-compiler

在vcpkg中不懂如何使用 nvcc 的 -allow-unsupported-compiler, 所以直接注释了CUDA中对版本的检查代码. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include\crt\host_config.h 奇了怪了,我是用的是vs2022,但是还是被检查为不支持的编译器!!! 可以试一下改这…

搭建gitlab代码托管仓库(解决centos7无法使用默认数据源问题)

公司的gitlab由于停电&#xff0c;又崩了&#xff0c;每次停电都会崩掉。所以就想到自己学一下搭建gitlab代码中心&#xff0c;后面在搞一个jenkins自动发版学习一下&#xff0c;慢慢搞吧。 在弄的时候&#xff0c;发现Centos7居然在2024年6月31日停止维护了。这就离谱了&…

职教国培丨高职教师数据分析与挖掘课程实施能力提升培训班莅临泰迪智能科技参观调研

7月28日&#xff0c;由广东机电职业技术学院牵头&#xff0c;广东泰迪智能科技股份有限公司为合作单位的“2024年高职教师数据分析与挖掘课程实施能力提升培训班”老师莅临广东泰迪智能科技股份有限公司产教融合实训基地参观调研&#xff0c;来自广东省各地36位高校教师参与本次…

如何在 Kali Linux 上安装和使用 Docker 和 Docker Compose

Docker 和 Docker Compose 是现代开发者必备的工具&#xff0c;特别是当你需要在不同的环境中部署应用时。本文将详细介绍如何在 Kali Linux 上安装 Docker 和 Docker Compose&#xff0c;并使用它们启动服务。即使你是个技术小白&#xff0c;也能轻松跟随这篇指南完成操作。 …

Ecovadis认证:企业申请Ecovadis认证条件

Ecovadis认证是一种用于评估和评价企业可持续发展绩效的认证体系。该认证由Ecovadis公司提供&#xff0c;目的是帮助公司了解和改善其环境、社会和治理&#xff08;ESG&#xff09;实践。 Ecovadis认证主要基于四个方面进行评估&#xff1a;环境、劳工和人权、道德采购以及可持…

Python——记录pip问题(解决下载慢、升级失败问题)

在python开发中&#xff0c;经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢&#xff0c;经常导致超时。 有很多朋友刚刚学Python的时候&#xff0c;会来问为什么pip下载东西这么慢啊&#xff1f; 而且pycharm里面下载库也是非常的慢…

Linux服务器安装MySQL8.0

序号类型地址1MySQLLinux&#xff08;centos 7.5&#xff09;服务器安装MySQL5.72MySQLLinux服务器安装MySQL8.03MySQLMySQL操作之概念、SQL约束&#xff08;一&#xff09;4MySQLMySQL操作之数据定义语言&#xff08;DDL)&#xff08;二&#xff09;5MySQLMySQL操作之数据操作…

React三原理和路由

代码下载 React 组件通讯原理 setState() 说明 setState() 是异步更新数据的&#xff0c;使用该语法时&#xff0c;后面的 setState() 不要依赖于前面的 setState()&#xff0c;可以多次调用 setState() &#xff0c;只会触发一次重新渲染&#xff1a; this.setState({ coun…

CPQ报价管理系统 | 成本报价CPQ解决方案

一、成本报价流程现状 1、传统流程 2、业务痛点 ①、数据手工重复输入环节多、易错&#xff0c;为保障准确性需多次复核&#xff0c;影响报价效率 ②、原材波动较大&#xff0c;但是当前询价流程只有一次性&#xff0c;原材成本发生变化&#xff0c;无法及时更新变化提醒报价…

类和对象(作业篇)

简简单单整理一下咱们的小作业&#xff0c;这次的作业比较简单&#xff0c;只有选择题&#xff1a; public class Test{private float f1.0f;int m12;static int n1;public static void main(String args[]){Test tnew Test();} }A&#xff1a;抛开private不说&#xff0c;先看…

解析顺序表【数据结构】

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有线序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就是说是连续的一条线…

HTML 字符集详解及示例

文章目录 摘要引言从ASCII到UTF-8的演变ASCII 字符集ANSI字符集ISO-8859-1字符集UTF-8字符集 示例代码运行Demo小结表格总结未来展望参考资料 摘要 本文介绍了HTML中的字符集演变历史&#xff0c;从最初的ASCII到现代的UTF-8&#xff0c;并提供了设置字符集的示例代码。文中涵…

图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据

深入了解Paper.js&#xff1a;实现SVG和JSON的导入导出功能 Paper.js是一款强大的矢量绘图JavaScript库&#xff0c;非常适合用于复杂的图形处理和交互式网页应用。本文将详细介绍如何在Paper.js项目中实现SVG和JSON格式的导入导出功能&#xff0c;这对于开发动态图形编辑器等…

git reset --soft(回退commit,保留add)

参考博客&#xff1a;git reset --soft命令的使用-CSDN博客感觉博客中举的例子不是很好。读者自行判断。举的例子的场景适合使用revert&#xff0c;撤销就行了。另外建议看下边这篇博客&#xff0c;这篇详细介绍了reset和revert&#xff0c;带图。但是要注意这个reset是hard的&…

mysql 内存一直增长(memory/sql/thd::main_mem_root)

mysql版本 8.0.14 发现过程 查询总内存 SELECT t.EVENT_NAME, t.CURRENT_NUMBER_OF_BYTES_USED FROM performance_schema.memory_summary_global_by_event_name t ORDER BY t.CURRENT_NUMBER_OF_BYTES_USED DESC;前&#xff1a; memory/sql/thd::main_mem_root 1…

第十五天啦 2024.8.1 (Spring框架)

1.从宏观上看spring框架和springboot Spring框架解决了企业级的开发的复杂性&#xff0c;它是一个容器框架&#xff0c;用于装java对象&#xff08;Bean&#xff09;&#xff0c;使程序间的依赖关系交由容器统一管理&#xff0c;松耦合&#xff0c;提高了可测试性和维护效率&a…