0
点赞
收藏
分享

微信扫一扫

跑满进线程同时运行查询百度关键词排名

这段时间帮人做一个查询排名的系统,在这个过程中,分享一些代码方面的知识点,在有大量关键词的时候,可能单线程查询排名速度会比较慢,这次试着用进程和线程同时运行,查询关键词排名速度非常快了。

首先运行一下效果看看:

检测一下,查询关键词排名的准确性:

跑满进线程同时运行查询百度关键词排名_多线程


跑满进线程同时运行查询百度关键词排名_html_02


代码核心原理

进程池+多线程实现,进程池根据你电脑的cpu核数同时进行运行,线程池根据查询页数开启线程数。前10页依次查询,遇到当前页有排名,就return返回,不再执行后面线程

def task_pool():
info = connect_db()
# get_cookies()
with ProcessPoolExecutor(max_workers=8) as executor:
executor.map(main,list(info))
def range_thr2(keyword,web_name):
q = Queue()
for page in range(0,100,10):
t = Thread(target=spider_index,args=(keyword,q),kwargs={'page':str(page)})
t.start()
html = q.get()
ranking = parse_ranking(html,web_name)
# print(ranking)
t.join()
return ranking

在请求页面中,加入线程锁。对每个进程下的线程进行加锁和一定的等待时间,防止同时大量请求,触发反爬机制。


l.acquire()
res = requests.get(url=url,headers=headers,verify=False)
time.sleep(2)
# q = Queue()
l.release()
if res.status_code == requests.codes.ok:
res.encoding = 'utf-8'
if 'wappass' in res.url:
print(res.url)
res = get_html(url)

这样实现了快速查询关键词排名的任务了。


举报

相关推荐

0 条评论