1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?SEO工具?>?当前文章

      SEO工具

      python多线程百度PC查询url是否有收录且索引

      2020-08-24 180赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        一个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多线程百度PC查询url是否有收录且索引文章写得不错,值得赞赏
      国产99视频精品免视看6