您的位置: 网站首页> SEO工具> 当前文章
python多线程百度mo指定域名查询关键词排名
老董-我爱我家房产SEO2020-08-24192围观,108赞
查询关键词排名有两种,第一种是指定url和关键词查看是否有排名,第二种是提供关键词查看某个域名下哪个url有排名,这里提供第二种方式的脚本。其中的注意事项如下(线程数默认是1,现在百度反爬比之前严重!线程最好是1。【多线程写同一个文件需要加锁否则可能数据错乱)):
1、准备关键词文件kwd.txt(一行一个)
2、指定待查询域名domain
3、域名不要带https或者http
4、如果一个词某个域名下有2个url出现排名 取第一个
# ‐*‐ coding: utf‐8 ‐*‐ """ 关键词文件kwd.txt(一行一个) 仅查前十名 指定待查询域名domain domain不要带https或者http 结果保存文件格式:关键词 对应排名的url 及排名值 如果一个词某个域名下有2个url出现排名 取第一个 """ import requests from pyquery import PyQuery as pq import threading import queue import gc import json class BdmoRank(threading.Thread): def __init__(self): threading.Thread.__init__(self) # 读取txt文件 获取待查询url @staticmethod def read_txt(filepath): q = queue.Queue() for line in open(filepath, encoding='utf-8'): kwd = line.strip() q.put(kwd) return q # 获取某词的serp源码 def get_html(self, url, retry=2): try: r = requests.get(url=url, headers=user_agent, timeout=5) except Exception as e: print('获取源码失败', url, e) if retry > 0: self.get_html(url, retry - 1) else: html = r.text return html # 获取某词的serp源码上包含排名url的div块 def get_data_logs(self, html): data_logs = [] if html and '百度' in html: doc = pq(html) try: div_list = doc('.c-result').items() except Exception as e: print('提取div块失败', e) else: for div in div_list: data_log = div.attr('data-log') data_logs.append(data_log) if data_log is not None else data_logs return data_logs # 检查链接是否首页有排名 def check_include(self,data_logs=[]): rank = None for data_log in data_logs: # json字符串要以双引号表示 data_log = json.loads(data_log.replace("'", '"')) rank_url = data_log['mu'] if doamin in rank_url: rank = data_log['order'] print(rank_url,rank) return rank_url,rank return 'not url found',rank # 线程函数 def run(self): while 1: kwd = q.get() try: url = "https://m.baidu.com/s?ie=utf-8&word={0}".format(kwd) html = self.get_html(url) data_logs = self.get_data_logs(html) rank_url,rank = self.check_include(data_logs) print(kwd,rank_url,rank) f.write(kwd + ' ' + rank_url+ ' '+ str(rank) + ' ') del kwd gc.collect() except Exception as e: print(e) finally: q.task_done() if __name__ == "__main__": doamin = 'renrenche.com' user_agent = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 8.1.0; ALP-AL00 Build/HUAWEIALP-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83 Mobile Safari/537.36 T7/10.13 baiduboxapp/10.13.0.11 (Baidu; P1 8.1.0)'} q = BdmoRank.read_txt('kwd.txt') f = open('bdmo_rank2.txt','w',encoding='utf-8') # 设置线程数 for i in list(range(1)): t = BdmoRank() t.setDaemon(True) t.start() q.join() f.flush() f.close()
鞍山保时捷二手车报价 not url found None 鞍山二手宝沃 https://m.renrenche.com/sh/car/fe11e17fbeb45886 5 鞍山北京二手车报价 not url found None 鞍山二手北汽幻速 https://m.renrenche.com/luohe/car/94afbec2606a6696 1 鞍山宝沃二手车报价 https://www.renrenche.com/cn/baowo/ 8 鞍山二手北汽绅宝 https://m.renrenche.com/bj/car/97313486b7d4b368 5 鞍山二手北汽威旺 https://m.renrenche.com/as/car/d21275d63df8e1c8 1 鞍山北汽绅宝二手车报价 https://m.renrenche.com/cn/beiqishenbao/ 10 鞍山北汽威旺二手车报价 https://m.renrenche.com/cn/beiqiweiwang/ 7 鞍山二手北汽新能源 not url found None 鞍山二手北汽制造 not url found None 鞍山北汽新能源二手车报价 https://www.renrenche.com/cn/beiqixinnengyuan/jishou/ 9 鞍山北汽制造二手车报价 not url found None 鞍山二手北京 not url found None
百度Mo指定域名查询关键词的排名url的代码如上,有问题请及时反馈给我,共同交流哈。
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
python多线程百度mo指定域名查询关键词排名文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200