使用Python制作一个批量查询搜索排名的SEO免费工具

搭建背景

最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千的关键词,你再去一个一个查,至少要花费数小时的时间。
虽然市面上有很多SEO免费或者收费工具,但免费的基本都不能批量查,网上免费的最多也就只能10个10个查询,而且查询速度很慢。收费的工具如Ahrefs、SEMrush等以月为单位收费最低也都要上百美刀/月,当然如果觉得价格合适也可以进行购买,毕竟这些工具的很多功能都很实用。今天我给大家分享的这个排名搜索工具基于python实现,当然肯定是不需要花费任何费用,装上python开发环境即可。

实现步骤

话不多说,上代码:

import requests
from bs4 import BeautifulSoup

首先我们导入requestsBeautifulSoup两个库,requests用于发送HTTP请求,BeautifulSoup用于解析HTML。

def get_google_rank(keyword, website):try:url = f"https://www.google.com/search?q={keyword}"headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'}response = requests.get(url, headers=headers)response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')search_results = soup.find_all('div', class_='g')for i, result in enumerate(search_results):link = result.find('a')['href']if website in link:return i + 1  # 返回排名(从1开始)return -1  # 如果未找到网站,返回-1except requests.exceptions.RequestException as e:print(f"An error occurred: {e}")return None

上述代码定义了一个名为get_google_rank的函数,该函数接受两个参数:keyword(关键词)和website(网站域名)。函数的目标是获取指定关键词在谷歌搜索结果中的排名。

在函数内部,首先构建了一个URL,该URL使用指定的关键词进行谷歌搜索。然后设置了一个User-Agent头部,模拟一个浏览器的请求。使用requests.get方法发送HTTP请求,获取搜索结果页面的响应。response.raise_for_status()用于检查请求是否成功,如果返回的状态码不是200,会抛出一个异常。

接下来,使用BeautifulSoup库解析响应的HTML内容,创建一个BeautifulSoup对象,并使用html.parser解析器进行解析。然后通过find_all方法查找所有具有’class’属性为’g’的’div’元素,这些元素包含了搜索结果的信息。

接着使用enumerate函数遍历搜索结果列表,并使用result.find('a')['href']获取每个搜索结果中的链接。如果指定的网站域名出现在链接中,就返回当前的排名(从1开始计数)。

如果循环结束后未找到指定的网站域名,函数返回-1,表示未找到网站。

如果在请求过程中发生异常,会捕获requests.exceptions.RequestException异常,并打印错误消息,然后返回None

# 示例用法
keywords = ['摸鱼小游戏','是男人就下100层','游戏']
website = 'haiyong.site'for keyword in keywords:rank = get_google_rank(keyword, website)if rank is not None:if rank == -1:print(f"{keyword}没有排名")else:print(f"{keyword}排名第{rank}")

最后是一个示例用法的代码。定义了一个包含多个关键词的列表keywords和一个指定的网站域名website

通过for循环遍历关键词列表,调用get_google_rank函数获取每个关键词在谷歌搜索结果中的排名。如果返回的排名不为None,则根据排名的值进行条件判断,如果排名为-1,打印关键词没有排名的消息,否则打印关键词的排名信息。

以上就是整段代码的含义和逻辑。该代码实现了获取指定关键词在谷歌搜索结果中的排名,并通过示例展示了如何使用这个函数。

完整代码

import requests
from bs4 import BeautifulSoupdef get_google_rank(keyword, website):try:url = f"https://www.google.com.hk/search?q={keyword}"headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'}response = requests.get(url, headers=headers)response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')search_results = soup.find_all('div', class_='g')for i, result in enumerate(search_results):link = result.find('a')['href']if website in link:return i + 1  # 返回排名(从1开始)return -1  # 如果未找到网站,返回-1except requests.exceptions.RequestException as e:print(f"An error occurred: {e}")return None# 示例用法
keywords = ['摸鱼小游戏','是男人就下100层','游戏']
website = 'haiyong.site'for keyword in keywords:rank = get_google_rank(keyword, website)if rank is not None:if rank == -1:print(f"{keyword}没有排名")else:print(f"{keyword}排名第{rank}")

放个必应上查询的截图吧。

在这里插入图片描述
在这里插入图片描述
另外,需要注意的是,频繁的使用爬虫程序进行搜索引擎结果的抓取可能导致IP被谷歌封锁。

解决ip封锁问题

当我们查询很多次排名之后,会出现类似下图这种报错:

在这里插入图片描述

这个错误消息表明在向谷歌服务器发送请求时遇到了问题。具体来说,它显示了一个名为“429 Client Error”的错误,表明由于发送了过多的请求而被服务器拒绝。

HTTP状态码429表示“太多请求”,意味着你发送的请求过于频繁,超出了服务器允许的限制。当服务器检测到某个IP地址或用户发送过多请求时,会返回这个状态码以示警告或拒绝服务。

所以为了避免这种情况,可以考虑使用代理IP来分散请求,降低被封锁的风险。这里我推荐一款好用的代理IP服务商:亮数据,我也是在寻找数据挖掘工具的过程中了解到这个平台,选择代理ip进行关键词排名查询可以有效地规避被封锁的问题。

在这里插入图片描述

亮数据的IP代理服务产品优点包括:

  • 匿名性:通过使用代理网络,用户可以隐藏自身的IP,使目标网站无法检测到用户的真实身份,从而获取真实可靠的信息。
  • 合法性:使用代理网络访问公开开源数据是完全合法的,因为用户访问的是公开数据而非私人内容。
  • 多样性:代理类型丰富,包括数据中心代理、静态住宅代理、动态住宅代理、手机移动代理以及代理组合,以满足不同需求。

除了IP代理服务,还有网络爬虫及解锁工具:

  • 网络爬虫:网络爬虫技术可以帮助用户从目标网站上获取所需数据和信息,用于数据收集、分析等用途。
  • 解锁工具:解锁工具可以帮助用户突破地理位置限制或竞争信息屏蔽,确保能够从目标网站获取信息而不被屏蔽或误导商业决策。

亮数据为粉丝提供了10美金的抵用券,成功注册账户,并登录后在用户界面里输入折扣代码即可享受抵扣!

折扣代码:haiyong
访问页面:https://www.bright.cn/use-cases/serp/?utm_source=brand&utm_campaign=brnd-mkt_cn_csdn_haiyong&promo=haiyong

如有问题,可以关“Bright_Data”注亮数据官微,联系后台客服。

这些工具在不同场景下都发挥着重要作用,包括广告验证、旅游情报、品牌保护等,为用户提供了访问全球重要地区及重要站点的通行证,并助力数据采集工作。

下面是一个修改后的示例,演示了如何在函数中使用代理IP:

import requests
from bs4 import BeautifulSoup# 代理IP地址,替换成你自己的代理IP
proxy = {'http': 'http://your_proxy_ip:port','https': 'https://your_proxy_ip:port'
}def get_google_rank(keyword, website):try:url = f"https://www.google.com.hk/search?q={keyword}"headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'}response = requests.get(url, headers=headers, proxies=proxy)  # 使用代理IP发送请求response.raise_for_status()soup = BeautifulSoup(response.text, 'html.parser')search_results = soup.find_all('div', class_='g')for i, result in enumerate(search_results):link = result.find('a')['href']if website in link:return i + 1  # 返回排名(从1开始)return -1  # 如果未找到网站,返回-1except requests.exceptions.RequestException as e:print(f"An error occurred: {e}")return None# 示例用法
keywords = ['摸鱼小游戏','是男人就下100层','游戏']
website = 'haiyong.site'for keyword in keywords:rank = get_google_rank(keyword, website)if rank is not None:if rank == -1:print(f"{keyword}没有排名")else:print(f"{keyword}排名第{rank}")

在这个修改后的示例中,我们添加了一个名为proxy的字典,其中包含了HTTP和HTTPS协议的代理IP地址。然后,在调用requests.get方法时,通过proxies参数将代理IP传递给请求。这样就能够使用代理IP发送请求,帮助降低被封锁的风险。

记得将’your_proxy_ip:port’替换成你自己的代理IP地址和端口即可。

到此我们就已经完成了用 Python 制作的一个批量查询搜索排名的SEO工具,当然,如果大家有什么更好的建议也可以在评论中指出,感谢大家的阅读。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】捕捉PC桌面的插件

【背景】 之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。 在此感谢作者Hecomi。 【特征和限制】 一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电…

备战蓝桥杯Day35 - 动态规划 - 01背包问题

问题描述 隐含前提: 1.物体是不可分的,要么装,要么不装,不能只装一部分。 2.物体顶多使用一次。 动态规划思路 我在b站上看的闫氏dp分析大法的视频,他对dp问题做了总结归纳。 从集合的角度分析dp问题。求出有限集…

[python]bar_chart_race设置日期格式

1、设置日期标签的时间格式 # 设置日期格式,默认为%Y-%m-%dbcr.bar_chart_race(df, covid19_horiz.gif, period_fmt%b %-d, %Y) 2、更改日期标签为数值 # 设置日期标签为数值bcr.bar_chart_race(df.reset_index(dropTrue), covid19_horiz.gif, interpolate_period…

推荐一款.NET开源跨平台的开箱即用的DNS服务器软件

前言 今天要给大家推荐一款.NET开源跨平台的开箱即用的DNS服务器软件(用于提供 DNS 解析服务):Technitium DNS Server。 项目介绍 Technitium DNS Server是一个开源的权威和递归DNS服务器,可以用于自主托管DNS服务器以提升隐私和…

Linux收到一个网络包是怎么处理的?

目录 摘要 ​编辑 1 从网卡开始 2 硬中断,有点短 2.1 Game Over 3 接力——软中断 3.1 NET_RX_SOFTIRQ 软中断的开始 3.2 数据包到了协议栈 3.3 网络层处理 3.4 传输层处理 4 应用层的处理 5 总结 摘要 一个网络包的接收始于网卡,经层层协议栈…

利用Jmeter工具对服务器,数据库进行性能监控,压测,导出性能测试报告

Jmeter是Apache基金会旗下的一款免费,开源,轻量级的性能测试工具,主要针对web应用程序客户端/服务器进行性能测试.它可以分别测试静态、动态资源(Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等),它可以通过线程组来模拟数个用户,在一段时间内同时登录服务器,数个用…

LeetCode-热题100:42. 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入: height [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,…

CICD流水线(ali)

后端CICD 一、打开云效流水线,创建流水线

HarmonyOS NEXT应用开发之听歌识曲水波纹特效案例

介绍 在很多应用中,会出现点击按钮出现水波纹的特效。 效果图预览 使用说明 进入页面,点击按钮,触发水波纹动画。再次点击按钮,停止水波纹动画。 实现思路 本例涉及的关键特性和实现方案如下: 要实现存在两个连续…

TikTok云手机是什么原理?

社交媒体的快速发展和普及,TikTok已成为全球最受欢迎的短视频平台之一,吸引了数以亿计的用户。在TikTok上,许多用户和内容创作者都希望能够更灵活地管理和运营多个账号,这就需要借助云手机技术。那么,TikTok云手机究竟…

集合系列(十三) -红黑树实现分析详解

一、故事的起因 JDK1.8最重要的就是引入了红黑树的设计(当冲突的链表长度超过8个的时候),为什么要这样设计呢?好处就是避免在最极端的情况下冲突链表变得很长很长,在查询的时候,效率会非常慢。 红黑树查询&…

uniapp自定义导航栏左中右内容和图标,以及点击事件

uniapp自定义导航栏左中右内容和图标&#xff0c;以及点击事件 效果&#xff1a; 页面&#xff1a; <view class"navigation-bar"><view class"navigation-bar-left" click"navigateBack"><u-icon name"arrow-left"…

数学建模(灰色关联度 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 案例&#xff1a;哪些原因影响结婚率 数据标准化&#xff1a; 灰色关联度系数&#xff1a; 完整代码&#xff1a; 结果&#xff1a; 介绍&#xff1a; 灰色关联度是一种多指标综合评价方法&#xff0c;用于分析和评价不同指标之…

【DP】01背包问题与完全背包问题

一、01背包问题 有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&…

Email API有哪些主要功能?如何用API发信?

Email API的安全性如何保障&#xff1f;如何选择API进行集成&#xff1f; Email API简化了电子邮件交互的复杂性&#xff0c;让开发者能够轻松地将邮件功能集成到他们的应用中。那么&#xff0c;Email API究竟有哪些主要功能呢&#xff1f;接下来&#xff0c;AokSend将一一探讨…

在Linux搭建Emlog博客结合内网穿透实现公网访问本地个人网站

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

小迪安全46WEB 攻防-通用漏洞PHP 反序列化原生类漏洞绕过公私有属性

#知识点&#xff1a; 1、反序列化魔术方法全解 2、反序列化变量属性全解 3、反序列化魔术方法原生类 4、反序列化语言特性漏洞绕过 -其他魔术方法 -共有&私有&保护 -语言模式方法漏洞 -原生类获取利用配合 #反序列化利用大概分类三类 -魔术方法的调用…

Backend - Echarts(柱状条形图)

一、下载并安装 &#xff08;一&#xff09;官网 https://echarts.apache.org/zh/index.html &#xff08;二&#xff09;下载依赖 1. 官网里选择下载方式 https://echarts.apache.org/handbook/zh/basics/download/ 2. 官网github方式下载 https://github.com/apache/echa…

如何利用AI助力你的工作,学会这些AI操作秘密,让AI给你打工赚钱

随着科技的进步,AI已逐渐融入我们日常生活的方方面面,成为提升工作效率、拓展个人能力的得力助手。在这个时代,不是AI替代我们,而是那些懂得利用AI的同事将更具竞争力。学会让AI为你“打工”,不仅能够节省时间、提升效率,还能帮助我们发现新机会,实现创新。 AI的优势…

数据结构——认识二叉树

这是一篇回顾二叉树概念的文章 前言&#xff1a;一、了解树形结构1.2 树的定义2.2 树的相关概念2.2 树的表示形式 二、了解二叉树结构和性质2.1 什么是二叉树&#xff1f;2.2 二叉树的性质2.3 二叉树的遍历2.3 二叉树的应用范围2.5 二叉树的优缺点 三、掌握二叉树的存储结构3.1…