使用Python制作一個(gè)批量查詢搜索排名工具
搭建背景
最近工作中需要用上 Google SEO(搜索引擎優(yōu)化),有了解過(guò)的朋友們應(yīng)該都知道SEO必不可少的工作之一就是查詢關(guān)鍵詞的搜索排名。關(guān)鍵詞少的時(shí)候可以一個(gè)一個(gè)去查沒(méi)什么問(wèn)題,但是到了后期,一個(gè)網(wǎng)站都有幾百上千的關(guān)鍵詞,你再去一個(gè)一個(gè)查,至少要花費(fèi)數(shù)小時(shí)的時(shí)間。
雖然市面上有很多SEO免費(fèi)或者收費(fèi)工具,但免費(fèi)的基本都不能批量查,我看到網(wǎng)上最多也就只能10個(gè)10個(gè)查詢,而且查詢速度很慢。收費(fèi)的工具如Ahrefs、SEMrush等以月為單位收費(fèi)最低也都要 99$/月,當(dāng)然如果覺(jué)得價(jià)格合適也可以進(jìn)行購(gòu)買,畢竟這些工具的很多功能都很實(shí)用。今天我給大家分享的這個(gè)排名搜索工具基于python實(shí)現(xiàn),當(dāng)然肯定是不需要花費(fèi)任何費(fèi)用,裝上python開(kāi)發(fā)環(huán)境即可。
實(shí)現(xiàn)步驟
話不多說(shuō),上代碼:
import requests from bs4 import BeautifulSoup
首先我們導(dǎo)入requests和BeautifulSoup兩個(gè)庫(kù),requests用于發(fā)送HTTP請(qǐng)求,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開(kāi)始) return -1 # 如果未找到網(wǎng)站,返回-1 except requests.exceptions.RequestException as e: print(f"An error occurred: {e}") return None
上述代碼定義了一個(gè)名為get_google_rank的函數(shù),該函數(shù)接受兩個(gè)參數(shù):keyword(關(guān)鍵詞)和website(網(wǎng)站域名)。函數(shù)的目標(biāo)是獲取指定關(guān)鍵詞在谷歌搜索結(jié)果中的排名。
在函數(shù)內(nèi)部,首先構(gòu)建了一個(gè)URL,該URL使用指定的關(guān)鍵詞進(jìn)行谷歌搜索。然后設(shè)置了一個(gè)User-Agent頭部,模擬一個(gè)瀏覽器的請(qǐng)求。使用requests.get方法發(fā)送HTTP請(qǐng)求,獲取搜索結(jié)果頁(yè)面的響應(yīng)。response.raise_for_status()用于檢查請(qǐng)求是否成功,如果返回的狀態(tài)碼不是200,會(huì)拋出一個(gè)異常。
接下來(lái),使用BeautifulSoup庫(kù)解析響應(yīng)的HTML內(nèi)容,創(chuàng)建一個(gè)BeautifulSoup對(duì)象,并使用html.parser解析器進(jìn)行解析。然后通過(guò)find_all方法查找所有具有'class'屬性為'g'的'div'元素,這些元素包含了搜索結(jié)果的信息。
接著使用enumerate函數(shù)遍歷搜索結(jié)果列表,并使用result.find('a')['href']獲取每個(gè)搜索結(jié)果中的鏈接。如果指定的網(wǎng)站域名出現(xiàn)在鏈接中,就返回當(dāng)前的排名(從1開(kāi)始計(jì)數(shù))。
如果循環(huán)結(jié)束后未找到指定的網(wǎng)站域名,函數(shù)返回-1,表示未找到網(wǎng)站。
如果在請(qǐng)求過(guò)程中發(fā)生異常,會(huì)捕獲requests.exceptions.RequestException異常,并打印錯(cuò)誤消息,然后返回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}沒(méi)有排名") else: print(f"{keyword}排名第{rank}")
最后是一個(gè)示例用法的代碼。定義了一個(gè)包含多個(gè)關(guān)鍵詞的列表keywords和一個(gè)指定的網(wǎng)站域名website。
通過(guò)for循環(huán)遍歷關(guān)鍵詞列表,調(diào)用get_google_rank函數(shù)獲取每個(gè)關(guān)鍵詞在谷歌搜索結(jié)果中的排名。如果返回的排名不為None,則根據(jù)排名的值進(jìn)行條件判斷,如果排名為-1,打印關(guān)鍵詞沒(méi)有排名的消息,否則打印關(guān)鍵詞的排名信息。
以上就是整段代碼的含義和邏輯。該代碼實(shí)現(xiàn)了獲取指定關(guān)鍵詞在谷歌搜索結(jié)果中的排名,并通過(guò)示例展示了如何使用這個(gè)函數(shù)。
完整代碼
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開(kāi)始) return -1 # 如果未找到網(wǎng)站,返回-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}沒(méi)有排名") else: print(f"{keyword}排名第{rank}")
梯子有點(diǎn)問(wèn)題,先放個(gè)必應(yīng)上查詢的截圖吧。
到此這篇關(guān)于使用Python制作一個(gè)批量查詢搜索排名工具的文章就介紹到這了,更多相關(guān)Python查詢搜索排名工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
30秒學(xué)會(huì)30個(gè)超實(shí)用Python代碼片段【收藏版】
許多人在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、web開(kāi)發(fā)、腳本編寫和自動(dòng)化等領(lǐng)域中都會(huì)使用Python,它是一種十分流行的語(yǔ)言。本文將簡(jiǎn)要介紹30個(gè)簡(jiǎn)短的、且能在30秒內(nèi)掌握的代碼片段,感興趣的朋友一起看看吧2019-10-10五個(gè)Jupyter?Notebook實(shí)用魔法命令分享
Jupyter?Notebook是一個(gè)開(kāi)源的交互式編程環(huán)境,用于創(chuàng)建和共享包含實(shí)時(shí)代碼、文本等,本文主要來(lái)和大家分享一些有趣的Jupyter?Notebook魔法命令,需要的可以參考一下2023-07-07解讀Pandas和Polars的區(qū)別及說(shuō)明
Pandas和Polars是Python中用于數(shù)據(jù)處理的兩個(gè)庫(kù),Pandas適用于中小規(guī)模數(shù)據(jù)的快速原型開(kāi)發(fā)和復(fù)雜數(shù)據(jù)操作,而Polars則專注于高效數(shù)據(jù)處理,支持大規(guī)模數(shù)據(jù)和高性能計(jì)算2025-02-02Opencv實(shí)現(xiàn)傾斜圖片轉(zhuǎn)正示例
本文主要介紹了Opencv實(shí)現(xiàn)傾斜圖片轉(zhuǎn)正示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以參考下。2020-10-10python 自動(dòng)化辦公之批量修改文件名實(shí)操
這篇文章主要介紹了python 自動(dòng)化辦公之批量修改文件名實(shí)操,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07pytorch?tensor按廣播賦值scatter_函數(shù)的用法
這篇文章主要介紹了pytorch?tensor按廣播賦值scatter_函數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06