如何使用 BeautifulSoup 在谷歌搜索结果中获得页面排名?
在本文中,我们将学习如何通过使用Python搜索关键字来获得 Google 页面排名。让我们了解 Google 排名的基础知识,然后我们继续使用Python进行查找。
谷歌排名
谷歌关键词排名是当用户搜索关键词时网站在谷歌搜索中的位置。换句话说,Google 搜索基本上是在搜索索引中对数千亿个网页进行排序,以在几分之一秒内找到最相关、最有用的结果,并以一种可帮助您找到所需内容的方式呈现它们.
我们如何找到排名?
我们使用了一个叫做requests的模块,它有一个方法get返回一个包含页面内容、状态等的响应,我们将响应保存到一个对象页面,并使用page.text方法从对象中提取页面内容,并使用漂亮的汤来使用 python 的内置 HTML 解析器解析 HTML 中的文档,以便我们可以访问 HTML 文档中的数据并从搜索的关键字中获取 URL。
需要的模块
我们需要在你的系统中通过pip分别安装requests和bs4这两个模块。
请求:请求模块允许您发送 HTTP 请求并返回包含状态、页面内容等所有数据的响应。
Syntax: pip install requests
Beautiful Soup:beautiful Soup模块允许您使用 python 的内置 HTML 解析器解析原始 HTML 或 XML 文档,以便我们可以从解析的文档中提取数据。
pip install bs4
方法:
1.我们需要提供要搜索的关键字和网站,如果它存在于给定数量的搜索查询中,则可以找到排名。
Base url for google searching: “https://www.google.com/search?q=”
Add the keyword by replacing spaces with “+”
Add &num=30 as well representing the number of search results as 30
Final url = “https://www.google.com/search?q=Best+dsa+practice+questions&num=30”
2.使用requests.get(url)方法向 Google 搜索发送 HTTP 请求,该搜索返回来自搜索引擎的响应,该响应作为对象保存到页面。
page = requests.get(“https://www.google.com/search?q=Best+dsa+practice+questions&num=30”)
3.使用page.text方法获取页面内容,使用beautiful Soup解析原始HTML。
soup = BeautifulSoup(page.text, 'html.parser')
这将创建一个解析树,帮助访问 HTML 文档中的数据。
4.找到div,所有的类都叫“ZINbbc xpd O9g5cc uUPGi” 使用soup.find_all() 因为它包含所有搜索查询以及 标签内的 URL,并将其存储在 result_div 中。 (参考下面有开发者工具的图片)
result_div = soup.find_all(‘div’, attrs={‘class’: ‘ZINbbc xpd O9g5cc uUPGi’})
这是开发人员工具的图像,其中所有搜索查询都具有相同的 div 类但包含不同的 URL,我们可以通过检查 标记中的 URL 看到这里的排名为 2。
5.迭代 result_div 并找到 标签并检查是否存在任何 URL,如果找到,则检查它是否与输入中提供的网站匹配并将排名添加到 rank_list。 (rank_list 是一个字符串变量,因为可以出现多个等级)
link = div.find("a", href=True)
if link['href'][7:7+len(website)] == website:
rank_list += str(rank)+","
6.迭代结束后,返回rank_list并打印rank。
下面是完整的实现:
Python3
# import the required modules
import requests
from bs4 import BeautifulSoup
# Function will get all the ranks of the website
# by searching the keyword in google and returns
# a string of ranks or Website Missing if the website
# doesn't occur in the given number of search queries.
def find_rank(keyword, website, search_query):
# Initialise the required variables
rank, rank_list = 1, ""
# Base search url of google
url = "https://www.google.com/search?q="
# Replaces whitespace with "+" in keyword
keyword = keyword.replace(" ", "+")
# Base url is updated with the keyword to be
# searched in given number of search results.
url = url + keyword + "&num=" + str(search_query)
# requests.get(url) returns a response that is saved
# in a response object called page.
page = requests.get(url)
# page.text gives us access to the web data in text
# format, we pass it as an argument to BeautifulSoup
# along with the html.parser which will create a
# parsed tree in soup.
soup = BeautifulSoup(page.text, 'html.parser')
# soup.find_all finds the div, all having the same
# class "ZINbbc xpd O9g5cc uUPGi" that is stored
# in result_div
result_div = soup.find_all(
'div', attrs={'class': 'ZINbbc xpd O9g5cc uUPGi'})
# Iterate result_div and check for the given website
# inside tag adding the rank to the
# rank_list if found.
for div in result_div:
try:
# Finds tag and checks if the url is present,
# if present then check with the provided
# website in main()
link = div.find("a", href=True)
if link['href'][7:7+len(website)] == website:
rank_list += str(rank)+","
rank += 1
except:
pass
return (rank_list, "Website Missing")[rank_list == ""]
# Main Function
if __name__ == "__main__":
keyword = "dsa practice questions"
website = "https://www.geeksforgeeks.org"
search_query = 30
rank = find_rank(keyword, website, search_query)
if rank == "Website Missing":
print(rank)
else:
print("Rank of Website :", rank[:-1])
输出:
Rank of Website : 1,2