本帖最后由 yanhua501511 于 2019-8-13 17:49 编辑
在做seo的时候很多人都会要去找关键词,如果你是正规企业那么老实的去看指数最好,毕竟相对后期方面优化。
但是如果是灰色行业,关键词会面临的被封禁的地步,所以就弄了这么一个脚本。适用于站群或者目录等需要做超多关键词的人。
脚本原理:各大搜索引擎封禁词汇不给与展示,类似这样:
以上为举例!以上为举例!以上为举例!
相关结果2个,不展示收录结果!这个就是脚本的原理了。通过抽取txt文本关键词让脚本去百度。
设定一个结果数目,虽然这个办法不是很好,但是至少能帮各位筛选掉大部分封禁词。
[Python] 纯文本查看 复制代码 import requestsfrom lxml import etree
from queue import Queue
import threading
import time
import urllib
class BaiduSpider:
def __init__(self):
self.baseurl = "https://www.baidu.com/s?wd="
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K HTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"}
# URL队列
self.urlQueue = Queue()
# 响应html队列
self.resQueue = Queue()
# 生成URL队列
def getUrl(self):
f = open("jieguociku.txt", "r" , encoding="utf-8")#打开词库txt
for pNum in f:
# 拼接URL放到url队列中去
url = self.baseurl + urllib.parse.quote(pNum.strip()) + "&pn=0"
self.urlQueue.put((url,pNum))
# 请求,得到响应html,放到解析队列
def getHtml(self):
while True:
global html
# 1.从url队列中get值
(url,pNum) = self.urlQueue.get()
# 2.发请求,得响应,put到响应队列中
try:
# 设置20秒超时等待
res = requests.get(url, headers=self.headers, timeout=30)
res.encoding = "utf-8"
html = res.text
except Exception as f:
with open("chaoshi.txt", "a", encoding="utf-8") as f:
#超时保存文本
f.write(pNum)
# 放到响应队列
self.resQueue.put((html, pNum))
# 清除此任务
self.urlQueue.task_done()
# 解析页面方法
def getText(self):
while True:
(html, pNum) = self.resQueue.get()
parseHtml = etree.HTML(html)
r_list = parseHtml.xpath('//div[@id="wrapper_wrapper"]//div[@class="nums"]/span/text()')
if int(str(r_list[0][11:-1]).replace(',','')) >= 20000:
L = (pNum.strip(), r_list[0])
with open("guanjianzi.txt", "a", encoding="utf-8") as f:
f.write(str(pNum))
print(L)
# print(r_list[0])
# 清除此任务
#过滤完成保存文本
else:
with open("guanjianzixiaoyu.txt", "a", encoding="utf-8") as f:
f.write(str(pNum))
self.resQueue.task_done()
def run(self):
# 1.空列表,用来存放所有线程
thList = []
# 2.生成URL队列
self.getUrl()
# 3.创建请求线程,放到列表中
for i in range(50):
thRes = threading.Thread(target=self.getHtml)
thList.append(thRes)
#range线程数量50
# 4.创建解析线程,放到列表中
for i in range(50):
thParse = threading.Thread(target=self.getText)
thList.append(thParse)
# 5.所有线程开始干活
for th in thList:
th.setDaemon(True)
th.start()
# 如果队列为空,则执行其他程序
self.urlQueue.join()
self.resQueue.join()
if __name__ == "__main__":
begin = time.time()
spider = BaiduSpider()
spider.run()
end = time.time()
print(end - begin)
input()
代码如上!附上成品!
新人分享如果有大佬有好的建议希望指出。我这里会虚心的学习。
因为是第一次发帖所以排版可能又问题,还有希望有能帮忙解决封装exe的大佬帮助我一下,我封装exe总是提示错误。
小弟完全搞不懂了。谢谢各位!
希望帮到各位的同时,各位大大给下热心评论与评分!谢谢!
希望帮到各位的同时,各位大大给下热心评论与评分!谢谢!
希望帮到各位的同时,各位大大给下热心评论与评分!谢谢!
免费分享地址: https://share.weiyun.com/5IdN8Pw (密码:jKnx)
第一次分享原创。不会发帖.....现在取消了收费地址了。
|