您的位置: 网站首页> SEO工具> 当前文章
python多线程百度mo指定域名查询关键词排名
老董-我爱我家房产SEO2020-08-24176围观,149赞
查询关键词排名有两种,第一种是指定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指定域名查询关键词排名文章写得不错,值得赞赏


