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

news2024/12/23 19:47:20
  • 💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】
  • 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】
  • 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】

搭建背景

最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千的关键词,你再去一个一个查,至少要花费数小时的时间。

虽然市面上有很多SEO免费或者收费工具,但免费的基本都不能批量查,我看到网上最多也就只能10个10个查询,而且查询速度很慢。收费的工具如Ahrefs、SEMrush等以月为单位收费最低也都要 99$/月,当然如果觉得价格合适也可以进行购买,毕竟这些工具的很多功能都很实用。今天我给大家分享的这个排名搜索工具基于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  # 如果未找到网站,返回-1

    except 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 BeautifulSoup

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)
        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  # 如果未找到网站,返回-1

    except 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}")

梯子有点问题,先放个必应上查询的截图吧。

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

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

相关文章

《人月神话》译文修订明细(10)-读者可以对照修改

《人月神话》译文修订明细(1)-读者可以对照修改 《人月神话》译文修订明细(2)-读者可以对照修改 《人月神话》译文修订明细(3)-读者可以对照修改 《人月神话》译文修订明细(4)-读…

团队管理之性能实施团队日志14 -- 项目终结

历时2个月16天,项目结束了。 今天给客户做最终的汇报。 本来汇报准备了92页PPT,把几个系统单独的都一个个说了个遍。但是感觉这种方式老板不一定能接受。于是换了一个方式,只说overview的结果,但系统的就不一一解释了。 老板更想…

【C/C++套接字编程】TCP通信实验

一、实验目的: 通过本实验使学员了解和掌握编写基于TCP协议的网络应用程序。任务是开发一个基于TCP Socket API的网络聊天程序。 二、实验内容简要描述 用所学的TCP Socket API知识来开发基于TCP协议的网络。通过编程实现服务端和客户端的信息通信。TCP协议建立交…

【MySQL】之索引与索引优化

目录 一、索引介绍二、MySQL索引结构二、索引优化 一、索引介绍 1、索引简介 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 可以得到索引的本质:索引是数据结构。索引的目的在于提高查询效率&…

高考状元、通用语言和轰趴-UMLChina建模知识竞赛第4赛季第4轮

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题,即可获得本轮优胜。第4题为附加题,对错不影响获奖&#xff0c…

Springboot使用pdfbox提取PDF图片

Springboot使用pdfbox提取PDF图片 PDFBox的介绍Springboot集成PDFBox一、提取pdf首页为图像1. 实现需求2. 项目代码3. 执行结果 二、将pdf内容全部转换为图像1. 实现需求2. 项目代码3. 执行结果4.注意事项1.优化项目代码2.提升Java heap size PDFBox的介绍 PDFBox是一个用于创…

FDM3D打印系列——1、愉快的给自己打印一个手办

大家好,我是阿赵。 我日常的个人爱好,除了写博客,还有弹吉他打鼓电子琴,还有3D打印。 3D打印只是我的一个业余,不过由于经常把做好的作品发朋友圈,也带动了身边一些朋友买了和我一样型号的打印机&#xff0…

一种说法:哲学是研究真善美的

一种说法:哲学是研究真、善、美的 今天在工作中谈到了真善美 确定一个企业价值观:求真,求善,求美 我觉得挺好,起码无需解释能懂意思 趣讲大白话:真善美是基本问题 【趣讲信息科技199期】 *****************…

用Python做一个下载器,从获取数据到编写GUI界面

本片文章目录 前言案例基本实现思路?代码实现一、单张小说下载二、整本小说下载三、多线程采集四、采集排行榜所有小说五、搜索小说功能六、GUI界面 尾语 前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 对于广大书虫而言,没有小说看是最痛苦的&#xff0…

English Learning - L3 作业打卡 Lesson6 Day42 2023.6.15 周四

English Learning - L3 作业打卡 Lesson6 Day42 2023.6.15 周四 引言🍉句1: In towns that are near the sea, the tiny lanterns which had been hung in the streets the night before, are placed into the water when the festival is over.成分划分弱读连读爆破…

(二叉树) 129. 求根节点到叶节点数字之和 ——【Leetcode每日一题】

❓129. 求根节点到叶节点数字之和 难度:中等 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数…

CSS- 横向和纵向时间轴

/*横向时间轴*/.time-horizontal {list-style-type: none;border-top: 1px solid #707070;max-width: 800px;padding: 0px;margin: 0px;}.text-horizontal {list-style-type: none;max-width: 800px;padding: 0px;margin: 0px;}.text-horizontal li {float: left;position: rel…

数据中心网络的电路交换域

buffer 的意义在用带宽平滑统计突发: 流量波动越大,统计复用能效越高。假设没有 buffer,将大量溢出和空载并存。但如果流量是可预期的,也可以转向相反的方向,比如虚电路。 数据中心与 Internet 不同,流量…

90后Android程序员杨国民的羊粪肥创业故事:从社恐到销售奇迹

90后Android程序员杨国民的羊粪肥创业故事:从社恐到销售奇迹 最近一位90后程序员杨国民的创业故事在社交媒体上引起了轰动。他回到了内蒙古老家,并以羊粪肥为主要产品,取得了惊人的销售成绩。据报道,他的羊粪肥月销量达到了120万…

Java选择题刷题记录2

Java集合的关系 图片来自原文链接:https://blog.csdn.net/weixin_45861283/article/details/116201140 HashMap的键可以为null Java基本数据类型,注意String不是基本数据类型 NIO 全称java non-blocking IO ,是指 Java 一系列改进的输入…

一篇文章docker-compose安装使用全解

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 关于docker composedocker compose安装Linux安装docker-composeWindows安装docker-compose docker-compose YMAL常用配置项综合配置示例 docker compose常用命令启动…

设计模式(二十):行为型之迭代器模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

LabVIEW开发移动车辆的识别和特征提取

LabVIEW开发移动车辆的识别和特征提取 闭路电视摄像机在高速公路上变得越来越普遍,并用于交通管理;摄像机允许操作员直观地监控交通状况。随着摄像机数量的增加,操作员监控每个摄像机成为一项艰巨的任务,因此录制视频,并且通常仅…

Hack The Box - Web - Phonebook

玩一会儿htb的challenge,最近找工作,所以先玩玩web类型的。 这道题目的类型有人说是LDAP注入、有人说是like注入。LDAP这玩意08年的时候估计可能比较流行,但是现在应该没多少人用了吧,比较小众。其实LDAP这个特殊的数据库是比较契…

LwIP RAW API 实现UDP多播收发

LwIP RAW API 实现UDP多播收发实现 1、初始化 static struct udp_pcb *multicast_pcb NULL; static ip_addr_t mutlcast_send_ip; static ip_addr_t mutlcast_recv_ip;static void udp_recv_multicast(void *arg, struct udp_pcb *pcb, struct pbuf *p,const ip_addr_t *add…