无聊写来练练手,觉得有用的拿去
只写了百度pc和360的排名,百度手机、搜狗、神马也是差不多的,直接自己改就行了
[Python] 纯文本查看 复制代码 import requests
from bs4 import BeautifulSoup
import re
import time
from fake_useragent import UserAgent
# 搜索引擎排名类
class SearchRank():
# 关键词
keyword = None
# 匹配的域名
matchUrl = None
# 当前排名
rank = 0
# 请求头
headers = {
'User-Agent': UserAgent().random
}
# 初始化
def __init__(self, keyword, matchUrl):
self.keyword = keyword
self.matchUrl = matchUrl
# 百度pc排名
def rankBaiduPc(self):
for i in range(0, 100, 10):
url = f'https://www.baidu.com/s?ie=utf-8&wd={self.keyword}&pn={i}'
res = requests.get(url=url, headers=self.headers)
if res.status_code == 200:
res_text = res.text
# print(res.content.decode('utf-8'))
soup = BeautifulSoup(res_text, 'lxml')
# 找出当前页中id为content_left下的子div的数据,返回的是一个列表数据
html = soup.select('#content_left>div[tpl=se_com_default]')
# 如果html的长度为0,证明当前操作频繁,没有获取到所需数据
print(len(html))
for j in range(len(html)):
# 在结果中匹配是否包含有matchUrl的值
result = re.search(self.matchUrl, str(html[j]))
if bool(result):
self.rank = self.rank + j
return self.rank
self.rank += len(html)
time.sleep(10)
# 360排名
def rank360(self):
for i in range(0, 10):
url = f'https://www.so.com/s?ie=utf-8&src=360sou_newhome&q={self.keyword}&pn={i}'
res = requests.get(url=url, headers=self.headers)
if res.status_code == 200:
res_text = res.text
# print(res.content.decode('utf-8'))
soup = BeautifulSoup(res_text, 'lxml')
# 找出当前页中所有包含类名res-list的数据,返回的是一个列表数据
html = soup.select('.res-list')
# 如果html的长度为0,证明当前操作频繁,没有获取到所需数据
print(len(html))
for j in range(len(html)):
# 在结果中匹配是否包含有matchUrl的值
result = re.search(self.matchUrl, str(html[j]))
if bool(result):
self.rank = self.rank + j
return self.rank
self.rank += len(html)
time.sleep(10)
obj = SearchRank('安卓破解', 'www.52pojie.cn')
res = obj.rank360()
if res:
print(f'网站排名是{res}')
else:
print('当前关键词未有排名')
|