您的位置: 网站首页> SEO工具> 当前文章
python多线程百度PC查询url是否有收录且索引
老董-我爱我家房产SEO2020-08-24189围观,121赞
一个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是否有收录且索引文章写得不错,值得赞赏


