• python查詢百度收錄(多線程版)_SEO交流_SEO前線
    發現更大的SEO世界
     找回密碼
     注冊
    搜索
    »首頁»SEO培訓 SEO論壇 SEO交流 帖子
    发新帖
    莫山,改我论坛密碼的没有小JJ,哼!!!    

    python查詢百度收錄(多線程版)

    查詢收錄數,收錄率,未收錄鏈接,收錄的鏈接
    需要安裝pycurl模塊
    需要查詢的URL放在url.csv裏面文件必須是utf-8格式
    運行BDshoulu.py文件
    在Windows下面的命令提示符下運行會亂碼,print的內容會亂碼,請自行轉碼,不影響結果。
    遇到驗證碼的時候會停止5分鍾重新查
    線程建議不要開太多,否則會導致封IP

    1. #coding:utf-8
    2. import pycurl,re,StringIO
    3. import  threading,Queue,time

    4. class caiji:
    5.         #打开网页  url:网页URL
    6.         def html(self,url):
    7.                 while 1:
    8.                         try:
    9.                                 b=StringIO.StringIO()
    10.                                 c=pycurl.Curl()
    11.                                 c.setopt(pycurl.URL,url) #打开URL
    12.                                 c.setopt(pycurl.FOLLOWLOCATION,2) #允许跟踪来源,有参数:1和2
    13.                                 c.setopt(pycurl.ENCODING, 'gzip')  #开启gzip压缩提高下载速度
    14.                                 c.setopt(pycurl.NOSIGNAL, True)   #开启后多线程不会报错
    15.                                 c.setopt(pycurl.MAXREDIRS,1) #最大重定向次数,0表示不重定向
    16.                                 c.setopt(pycurl.CONNECTTIMEOUT,60) #链接超时
    17.                                 c.setopt(pycurl.TIMEOUT,30)  #下载超时
    18.                                 c.setopt(pycurl.USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)')
    19.                                 #pycurl.USERAGENT  模拟浏览器
    20.                                 c.setopt(pycurl.WRITEFUNCTION, b.write)  #回调写入字符串缓存
    21.                                 c.perform() #执行上述访问网址的操作
    22.                                 # print c.getinfo(pycurl.HTTP_CODE)
    23.                                 c.close()
    24.                                 html=b.getvalue()   #读取b中的数据
    25.                                 return html    #跳出并返回html
    26.                         except:
    27.                                 continue


    28. wurl=open(r"url1.csv",'a')

    29. caiji=caiji()

    30. class count:
    31.         def __init__(self):
    32.                 self.shoulu=0
    33.                 self.wshoulu=0
    34.                 self.i=0
    35.                 self.lock=threading.Lock()


    36.         def c_wshoulu(self):
    37.                 self.lock.acquire()
    38.                 self.wshoulu+=1
    39.                 wshoulu=self.wshoulu
    40.                 self.lock.release()
    41.                 return wshoulu


    42.         def c_sl(self):
    43.                 self.lock.acquire()
    44.                 self.shoulu+=1
    45.                 shoulu=self.shoulu
    46.                 self.lock.release()
    47.                 return shoulu


    48.         def c_i(self):
    49.                 self.lock.acquire()
    50.                 self.i+=1
    51.                 i=self.i
    52.                 self.lock.release()
    53.                 return i

    54. count=count()

    55. class th(threading.Thread):
    56.         def __init__(self,qurl):
    57.                 threading.Thread.__init__(self)
    58.                 self.qurl=qurl
    59.                 self.lock=threading.Lock()
    60.                 self.cond=threading.Condition()


    61.         def run(self):
    62.                 while 1:
    63.                         ddc=self.qurl.get()
    64.                         if ddc is  None:
    65.                                 break
    66.                         while 1:
    67.                                 bdhtm=caiji.html('http://www.baidu.com/s?wd='+ddc)
    68.                                 self.lock.acquire()

    69.                                 if '百度为您找到相关结果约' in bdhtm:
    70.                                         i=count.c_i()
    71.                                         print '第%s条, %s ,收录'% (i,ddc)
    72.                                         wurl.writelines('第%s条, %s ,收录\n'% (i,ddc))
    73.                                         count.c_sl()
    74.                                         break

    75.                                 elif '抱歉,没有找到与' in bdhtm:
    76.                                         i=count.c_i()
    77.                                         print '第%s条, %s ,未收录'% (i,ddc)
    78.                                         wurl.writelines('第%s条, %s ,未收录\n'% (i,ddc))
    79.                                         count.c_wshoulu()
    80.                                         break

    81.                                 elif 'http://verify.baidu.com/' in bdhtm:
    82.                                         print ddc,'出现验证码,等待5分钟后自动开始'
    83.                                         self.lock.release()
    84.                                         time.sleep(500)
    85.                                         continue

    86.                                 else:
    87.                                         print 'Error'
    88.                                         break
    89.                         self.lock.release()


    90. qurl=Queue.Queue(0)
    91. threadCount=6    #开启线程数,默认6个线程

    92. ths=[]
    93. for t in range(threadCount):
    94.         thread=th(qurl)
    95.         thread.start()
    96.         ths.append(thread)

    97. for ddc in open(r'url.csv'):   #导入需要查询的URL文件,格式必须是utf-8
    98.         ddc=ddc[0:-1]
    99.         qurl.put(ddc)

    100. for tt in range(threadCount):
    101.         qurl.put(None)

    102. for t in ths:
    103.         t.join()

    104. sl=count.c_sl()-1

    105. print  '\n收錄率:'+str(round(float(sl)/float(count.c_i()-1)*100,2)),"%"
    106. print '收录:%s 条'%str(sl)
    107. print '未收录:%s 条'%str(count.c_wshoulu()-1)
    複制代碼
    发表于 2014-8-20 11:33:54
    回複 收藏
    hwj888,友鏈。    

    不知道快不快,之前那個不是很快。。等測試完在加分吧。。。。
    发表于 2014-8-20 12:42:47
    回複 收藏
    vic,請到個人資料頁面設置个人签名    [ 版主 ]

    不错的代码   感谢
    发表于 2014-8-20 13:28:25
    回複 收藏
    ZERO,SEO執著愛好者    

    代碼過多了些,粗看貌似是沒把Queue用好。

    如收录的URL计数,每次发现收录的,Queue put一条进去就行,最后计数。
    发表于 2014-8-20 13:54:41
    回複 收藏
    莫山,改我论坛密碼的没有小JJ,哼!!!    

    hwj888 发表于 2014-8-20 12:42
    不知道快不快,之前那個不是很快。。等測試完在加分吧。。。。

    多线程的,怎么会慢,如果慢就是你网速问题,别太快,会 封ip的。
     樓主佳哥seo 发表于 2014-8-20 13:55:22
    回複 收藏
    莫山,改我论坛密碼的没有小JJ,哼!!!    

    ZERO 发表于 2014-8-20 13:54
    代碼過多了些,粗看貌似是沒把Queue用好。

    如收录的URL计数,每次发现收录的,Queue put一条进去就行,最 ...

    我只用Queue導入URL數據了,沒做其他的。
     樓主佳哥seo 发表于 2014-8-20 14:36:06
    回複 收藏
    思明,技术宅男SEO之路    QQ:176089710    

    Queue 用于多线程的队列,还是挺好用的, 用来计数我也没用 Queue
    这类工具 我习惯配合 Mongodb 存储 进度 和 中间结果  ,好处就是意外终止,可以接着运行下去,不用从头开始 ,浪费时间
    发表于 2014-8-20 15:37:41
    回複 收藏
    506807274,請到個人資料頁面設置个人签名    

    支持,謝謝莫山分享
    发表于 2015-8-20 14:28:08
    回複 收藏
    大蘇,學習seo之路還很長    

    好像,查的時候,未收錄也被查成是收錄的,不知道是不是我自身的原因
    发表于 2015-8-24 10:37:07
    回複 收藏
    大蘇,學習seo之路還很長    

    未收录的,页面也包含 “百度为您找到相关结果约” ,这样也判断成收录的了
    发表于 2015-8-24 10:44:16
    回複 收藏
    星鬼,來自大角星    

    如果能增加收錄的保存到yishoulu.txt,未收錄的保存到weishoulu.txt這樣分開保存下,就好了。
    发表于 2015-9-25 16:29:51
    回複 收藏
    快速回複 返回頂部 返回列表