当前位置: 首页 > news >正文

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

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 地址与真实用户无法区分。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 我们的网站被狗爬了!
  • C语言之unsigned long long与指针相互转换实例(五十五)
  • 无名管道C语言
  • React native页面突然白屏
  • Mamba+Transformer完美融合,效果炸裂!
  • UE4 SLUA IOS打包报错解决办法
  • Python零基础入门教程
  • WSL和Windows建立TCP通信协议
  • 蓝桥杯 Python 研究生组-2023-省赛-分糖果-深度算法
  • 专业人士如何选?揭秘4款2024年常用的电脑录屏软件!
  • axure10的安装与使用教程,问题整理
  • 基于SpringBoot+Vue的健身俱乐部网站(带1w+文档)
  • 深入理解C语言中的枚举
  • 2024年让短片制作不再难,4款剪辑软件助你一臂之力!
  • 「码」上行动!一物一码+TPM让“多进货多卖货”不再是口号!
  • 【技术性】Search知识
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java教程_软件开发基础
  • Linux链接文件
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 大型网站性能监测、分析与优化常见问题QA
  • 后端_MYSQL
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 大数据全解:定义、价值及挑战
  • ​2020 年大前端技术趋势解读
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​低代码平台的核心价值与优势
  • ​什么是bug?bug的源头在哪里?
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #stm32驱动外设模块总结w5500模块
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1) caustics\
  • (1)bark-ml
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4.10~4.16)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (搬运以学习)flask 上下文的实现
  • (编译到47%失败)to be deleted
  • (补充)IDEA项目结构
  • (多级缓存)缓存同步
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十一)手动添加用户和文件的特殊权限
  • (数据结构)顺序表的定义
  • (推荐)叮当——中文语音对话机器人
  • (循环依赖问题)学习spring的第九天
  • (一) springboot详细介绍