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

  • 💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】
  • 🤟 前端学习课程:👉【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}")

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【详解】篮球记分牌硬件及代码

篮球记分牌设计 1 系统设计1.1 设计任务 1.2 性能指标要求1.2 设计思路及设计框图1.2.1设计思路1.2.2总体设计框图1.2.3电路原理图1.2.3 PCB布线图 2 主要程序模块的设计及原理2.1 外部中断0 2.2 菜单2.3 两队比分及两队犯规次数显示及修改2.3.1选择功能2.3.2修改功能2.3.3显示…

Steemit 会颠覆 Quora/知乎 甚至 Facebook 吗?

Steemit是基于区块链技术的社交媒体平台,其独特的激励机制吸引了众多用户。然而,是否能够真正颠覆Quora、知乎甚至Facebook这些已经成为社交巨头的平台,仍然存在着许多未知因素。本文将探讨Steemit的优势和挑战,以及其在社交领域中…

HTML5 语义元素(一)页面结构

本篇主要介绍HTML5增加的语义元素中关于页面结构方面的&#xff0c;包含&#xff1a; <article>、<aside>、<figure>、<figcaption>、<footer>、<header>、<main>、<nav>、<section>等元素。 目录 1. 语义元素介绍 1.…

Vue中如何进行移动端适配与响应式布局?

Vue中如何进行移动端适配与响应式布局&#xff1f; 如今&#xff0c;移动端适配与响应式布局已经成为Web开发中不可或缺的一部分。Vue.js作为一款流行的JavaScript框架&#xff0c;也提供了许多有用的工具和技术来实现移动端适配和响应式布局。在这篇文章中&#xff0c;我们将…

Stable-Diffusion|文生图 拍立得纪实风格的Lora 图例(三)

上篇【Stable-Diffusion|入门怎么下载与使用civitai网站的模型&#xff08;二&#xff09;】介绍了如何使用c站进行文生图&#xff0c;尤其一些Lora可能随时会下架&#xff0c;所以及时测试&#xff0c;及时保存很关键&#xff0c;更新一些笔者目前尝试比较有意思的Lora。 本篇…

hadoop基础(二)

JAVA客户端 环境搭建 创建Maven项目,添加Hadoop依赖. <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId…

CTFHub | php://input

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

selenium:元素定位之xpath、css

元素定位是在做UI自动化测试中最重要的一环&#xff0c;要牢牢掌握定位的方法&#xff0c;才能更有效率的进行UI自动化测试。 常见的元素定位方式&#xff1a; idnametag_nameclass_namelink_textpartial_link_textxpathcss 其中id&#xff0c;name是具有唯一性的&#xff0…

用HTML5制作精美战机游戏

每天要被大学老师催H5作业&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 不如看看本文&#xff0c;代码齐全&#xff0c;直接用来做参考案例&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44d;&#x1f44d; 代码…

最终版:1分钟自动部署数字人平台并提供web服务:唇形合成(wav2lip) + 超分修复(codeformer),

Demo效果 本文实现步骤:数字人形象(AI绘画) -> 文字转语音(谷歌tts) -> 表情迁移 -> 唇形合成 -> 视频超分 上述步骤所有技术均已在此专栏发布,可点击上方专栏查看具体博文 所有技术依赖环境及api接口均封装打包完毕,使用docker一键部署,预计耗时10分钟 原图 …

【unity】URP的shader开发中支持多光源,_ADDITIONAL_LIGHTS_VERTEX 和 _ADDITIONAL_LIGHTS 区别

项目里有一个其他同事实现的shader&#xff0c;美术那边希望能支持多个光源&#xff0c; 我一看代码里面&#xff0c; frag 函数里已经实现了 #ifdef _ADDITIONAL_LIGHTSuint pixelLightCount GetAdditionalLightsCount();for (uint lightIndex 0u; lightIndex < pixelL…

开源软件介绍——开源基金会和开源许可证

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来看一看世界范围内知名的开源基金会和开源许可证。 开源基金会 基金会是开源生态中的一个重要组成部分&#xff0c;用于资金的筹集与开源项目的前期资助与后期的发展。这里将介绍部分重要基金会&am…

阿里云备案服务码申请方法流程

阿里云备案服务码是什么&#xff1f;ICP备案服务码怎么获取&#xff1f;阿里云备案服务码分为免费和付费两种&#xff0c;申请备案服务码是有限制条件的&#xff0c;需要你的阿里云账号下有可用于申请备案服务码的云产品&#xff0c;如云服务器、建站产品、虚拟主机等&#xff…

Nginx+Tomcat负载均衡、动静分离群集

文章目录 NginxTomcat负载均衡、动静分离群集一.Nginx应用二.部署案例过程&#xff08;7层反向代理&#xff09;关闭防火墙与selinux 1.部署Nginx负载均衡器&#xff08;7-3&#xff09;2.部署Tomcat应用服务器&#xff08;7-2&#xff09;3.部署Tomcat多实例应用服务器&#x…

简单学生管理系统

简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501 转载请注明出处&#xff0c;尊重作者劳动成果。 目录 前期准备&#xff1a; 数据库的连接&#xff1a; 用户账号类&#xff1a;…

集权设施管理-AD域安全策略(二)

活动目录&#xff08;AD&#xff09;凭借其独特管理优势&#xff0c;从众多企业管理服务中脱颖而出&#xff0c;成为内网管理中的佼佼者。采用活动目录来管理的内网&#xff0c;称为AD域。 了解AD域&#xff0c;有助于企业员工更好地与其它部门协作&#xff0c;同时提高安全意…

【游戏编程扯淡精粹】工作第三年总结

工作第三年总结 文章目录 工作第三年总结#1 做了什么自研路线Lua 脚本系统ToolX #2 职业发展如何做事技术中台化内卷的职业市场个人成长 #3 心态建设Owner vs 打工人 今年仍然是个人成长视角更多一些&#xff0c;额外新学到的重点是&#xff0c;借助团队力量 先介绍两个词&…

python生成日报

目录 一&#xff1a;日报生成工具二&#xff1a;日报工具使用方式三&#xff1a;最终日报生成展示 一&#xff1a;日报生成工具 #!/usr/bin/python # coding:utf8class GetHtml(object):def __init__(self):self._html_head """<html><body style&qu…

线性神经网络

线性神经网络 我们应该从线性神经网络开始&#xff0c;去逐步了解深度神经网络&#xff08;深度学习&#xff09;的各种复杂结构和底层原理。 1. 线性回归 用一个线性的模型来拟合数据与它们的标签之间的映射&#xff0c;用于回归问题。 1.1 构造线性模型&#xff1a; y ω…

Hibernate框架【一】——HIbernate框架介绍

系列文章目录 Hibernate框架【三】——基本映射——一对一映射 Hibernate框架【四】——基本映射——多对一和一对多映射 Hibernate框架【五】——基本映射——多对多映射 Hibernate框架介绍 系列文章目录前言一、什么是HIbernate框架Hibernate架构图Hibernate提供的核心功能和…