您的位置: 网站首页> SEO工具> 当前文章
python多线程百度PC查询url是否有收录且索引
老董-我爱我家房产SEO2020-08-24183围观,140赞
一个url只有被收录且建立索引后才有可能获得流量,只有收录没有索引就无法通过检索词检索到。通常判断收录的方式是直接搜索该url看是否收录,而判断建立索引的方式是搜索该url的title,看看能否通过完整的title来检索到该url。如果能的话,则认为建立了索引!
其实要通过url能检索到就是有索引,因为url也是一种搜索词嘛。通过title检索不到因为权重太低。不过不必较真,还是按照大众化的思路来检测吧。脚本线程数默认是1,现在百度反爬比之前严重!线程最好是1。【多线程写同一个文件需要加锁否则可能数据错乱】
以下是批量查询一批链接百度PC是否有收录和索引!
1、准备url.txt,一行一个url,必须带http或https
2、区分https或者http
3、区分https://aaa/bbb和https://aaa/bbb/
4、查询某个url是否收录,有收录再访问该url获取title(模拟百度蜘蛛UA获取title),查询通过搜索title该url是否有排名
5、可能的坑:因为是访问url获取title,如果短时间查询同一个域名下多条url,可能被封造成获取title错误影响最终结果。
6、查询结果保存为bdpc_index.txt!
测试小部分url,代码如下:
# ‐*‐ coding: utf‐8 ‐*‐ """ 准备url.txt,一行一个url,必须带http或https 区分https或者http 区分https://aaa/bbb和https://aaa/bbb/ 查询某个url是否收录,有收录再访问该url获取title(模拟百度蜘蛛UA获取title),查询通过搜索title该url是否有排名 可能的坑:因为是访问url获取title,如果短时间查询同一个域名下多条url,可能被封造成获取title错误影响最终结果。 """ import requests from pyquery import PyQuery as pq import threading import queue class BdpcIndex(threading.Thread): def __init__(self): threading.Thread.__init__(self) # 读取txt文件 获取待查询url @staticmethod def read_txt(filepath): q = queue.Queue() for url in open(filepath, encoding='utf-8'): url = url.strip() q.put(url) return q # 获取某待查询url的title def get_title(self, url, user_agent): html = self.get_html(url, user_agent) if html: doc = pq(html) title = doc('title').text() return title # 获取某待查询url或某词的serp源码 def get_html(self, url, user_agent, 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, user_agent, retry - 1) else: html = r.content.decode('utf-8') # 直接 r.text有时识别错误 return html # 获取某待查询url或某词的serp源码上自然排名的所有url def get_encrpt_urls(self, html): encrypt_url_list = [] if html and '_百度搜索' in html: doc = pq(html) try: a_list = doc('.t a').items() except Exception as e: print('未找到加密url,链接未收录', e) else: for a in a_list: encrypt_url = a.attr('href') if encrypt_url.find('http://www.baidu.com/link?url=') == 0: encrypt_url_list.append(encrypt_url) return encrypt_url_list # 解密某条加密url def decrypt_url(self, encrypt_url, retry=1): try: encrypt_url = encrypt_url.replace('http://', 'https://') r = requests.head(encrypt_url, headers=user_agent) except Exception as e: print(encrypt_url, '解密失败', e) if retry > 0: self.decrypt_url(encrypt_url, retry - 1) else: return r.headers['Location'] # 获取某待查询url或某词的serp源码首页真实url def get_real_urls(self, encrypt_url_list): if encrypt_url_list: real_url_list = [self.decrypt_url(encrypt_url) for encrypt_url in encrypt_url_list] return real_url_list else: return [] # 检查链接是否有收录 def check_include(self, url, real_urls): if url in real_urls: return 1 else: return 0 # 线程函数 def run(self): while 1: target_url = q.get() try: # 查询该target_url是否收录 url = "https://www.baidu.com/s?ie=utf-8&wd={0}".format(target_url) html = self.get_html(url,user_agent) encrypt_url_list = self.get_encrpt_urls(html) real_urls = self.get_real_urls(encrypt_url_list) num_target_url = self.check_include(target_url, real_urls) # 有收录则判断是否索引 if num_target_url == 1: # 查询该target_url的title 检查是否有索引 title = self.get_title(target_url, baidu_ua) if title: url = "https://www.baidu.com/s?ie=utf-8&wd={0}".format(title) html = self.get_html(url, user_agent) encrypt_url_list = self.get_encrpt_urls(html) real_urls = self.get_real_urls(encrypt_url_list) num_title = self.check_include(target_url, real_urls) if num_title == 1: print(target_url, "收录且索引") f.write(target_url+' '+'收录且索引 ') elif num_title == 0: print(target_url, "收录无索引") f.write(target_url + ' ' + '收录无索引 ') else: print(target_url, '未获取title') f.write(target_url + ' ' + '未获取title ') elif num_target_url == 0: print(target_url, "无收录") f.write(target_url + ' ' + '无收录 ') del target_url except Exception as e: print(e) finally: q.task_done() if __name__ == "__main__": user_agent = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} baidu_ua = {'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html'} q = BdpcIndex.read_txt('url.txt') f = open('bdpc_index.txt','w',encoding='utf-8') # 设置线程数 for i in list(range(1)): t = BdpcIndex() t.setDaemon(True) t.start() q.join() f.flush() f.close()
http://www.ztaok.com/ 无收录 http://www.qieta.com/ 无收录 http://www.gxso.net/ 收录且索引 http://www.b2bvip.com/ 收录且索引 http://www.jzdhyl.com/ 收录无索引 http://www.zhankua.com/ 收录且索引 http://www.8pj.cn/ 收录无索引 http://www.b2b.cn/ 收录无索引 http://www.78b2b.com/ 收录且索引 http://www.xfsb119.com/ 收录无索引 http://www.pm9.cn/ 收录无索引 http://www.jhh.cn/ 无收录
百度PC收录索引查询的脚本大家可以复制下来测试下,有问题及时沟通。
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
python多线程百度PC查询url是否有收录且索引文章写得不错,值得赞赏