叶凯 发表于 2020-10-16 18:12

用python写的关键词在搜索引擎中的排名

无聊写来练练手,觉得有用的拿去
只写了百度pc和360的排名,百度手机、搜狗、神马也是差不多的,直接自己改就行了

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')
                # 如果html的长度为0,证明当前操作频繁,没有获取到所需数据
                print(len(html))
                for j in range(len(html)):
                  # 在结果中匹配是否包含有matchUrl的值
                  result = re.search(self.matchUrl, str(html))
                  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))
                  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('当前关键词未有排名')

law.liu 发表于 2021-7-8 15:11

File "C:\TMP\key.py", line 5, in <module>
    from fake_useragent import UserAgent
ImportError: cannot import name 'UserAgent' from 'fake_useragent' (unknown location)
楼主这是什么意思?小白

adzs552 发表于 2021-7-8 16:58

law.liu 发表于 2021-7-8 15:11
File "C:\TMP\key.py", line 5, in
    from fake_useragent import UserAgent
ImportError: cannot imp ...

导入错误,感觉是没有这个包,是不是你python版本不一样或者没有这个包

heelihua 发表于 2020-10-16 18:28

沙发,来一个。点赞

MinnieLui 发表于 2021-4-1 16:27

楼主,这个可以改成爬谷歌的吗?

叶凯 发表于 2021-4-1 19:05

MinnieLui 发表于 2021-4-1 16:27
楼主,这个可以改成爬谷歌的吗?

调整下代码是可以的,这个要自己改了

MinnieLui 发表于 2021-4-8 11:20

好的,我试试看,谢谢楼主

花开叶落本无缘 发表于 2021-4-10 10:40

有什么作用的

eden88888 发表于 2021-5-11 09:17

还没有学会,支持一个

一日知三秋 发表于 2021-7-8 16:49


学习,支持一个
页: [1] 2
查看完整版本: 用python写的关键词在搜索引擎中的排名