【Python】URL深度采集+源码分析

来源:互联网 发布:淘宝精品服饰广告案例 编辑:程序博客网 时间:2024/06/02 03:53

现在市面上URL采集工具大把大把的,重复造轮子也没有啥意思

但是还会执着写了这个工具,一是用自己的安全无后门担忧,二是写工具的能提高自身水平,三主要是市面上url采集工具不够强,抓取力度不够...

我的URL采集工作假设工程:
                              1.子域名
                              2.友情链接
                              3.同IP站点

      A 首先百度采集URL
          B  查询旁站    
              C  对旁站以及主站爬行友情链接
                  ## C段查询
                 D   对爬行到的友情链接继续在查询旁站
                             E  最后的结果逐个查询子域名                    这是我写的构架思路,最后完成后发现用一个初始url做测试爬行出来了五千多个url.....于是砍了又砍
最终的成果是 :

                               先爬行旁站---------->在爬行旁站和主站的友情链接---------->在爬行友情链接的旁站---------->去重复
   但是这样还是挺大的  用一个url做测试,爬行出来了3000多个网站.........可能是这个url比较大或者比较屌吧......一般小站应该没这么多

  而且还只是一个url啊,就算用我自己博客之前写的url采集工具采集一次也能采集到几百个url,几百个url放进去进行深度采集去重复后还能剩下几万个url

查询旁站的时候我在站长工具&webscan&等等一系列的平台测试后,最终还是采用了webscan

源码如下

#coding=utf-8import reimport requestsimport osimport timeprint unicode('''作者:浪子燕青作者QQ:982722261''','utf-8')headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102Safari/537.36'}#查询原始URL的旁站,保存在urlx1.txt当中def tongip():    f1 = open('urlx.txt','r')   #我上个url采集到的url地址    f2 = f1.readlines()    f3 = open('urlx1.txt','w')    for uuu in f2:        urla = uuu.strip('\n')        urlip = 'http://www.webscan.cc/?action=getip&domain=' + urla    #构造url,提交上去就能得到IP        try:            r = requests.get(url=urlip,headers=headers,timeout=10)            zhaohan1 = re.findall('{"ip":"(.*?)",',r.content)  #正则匹配出ip            print zhaohan1            urlip2 = 'http://www.webscan.cc/?action=query&ip=' + ''.join(zhaohan1)            print urlip2            r1 = requests.get(url=urlip2)            zhaohan2 = re.findall('domain":"(.*?)",',r1.content)  #正则匹配到二次发送数据的url            for zhaohan3 in zhaohan2:                print zhaohan3                zhaohan4 = zhaohan3.replace('\\','')                f3.write(zhaohan4 + '\n')        except:            print 'no found'            pass    f3.close()tongip()#对旁站和主站的友情链接探测,结果保存在urlx2.txt当中  def yqlj():    f1 = open('urlx1.txt','r')    f2 = f1.readlines()    f3 = open('urlx2.txt','w')    for uuu in f2:        urla = uuu.strip('\n')        try:            r = requests.get(url=urla,headers=headers,timeout=10)  #用的爬行页面,自主正则匹配友情链接            yq = re.findall('<option value="(.*?)/">',r.content)   #对不少url做测试,寻找一些差异 都写进去防止爬行不全面            yq1 = re.findall('<option value="(.*?).cn">',r.content)            yq2 = re.findall('<option value="(.*?).com">',r.content)            yq3 = re.findall('<option value="(.*?).net">',r.content)            for zhaohan in yq:                print zhaohan                f3.write(zhaohan + '\n')            for zhaohan1 in yq1:                print zhaohan1                f3.write(zhaohan1 + '.cn' + '\n')            for zhaohan2 in yq2:                print zhaohan2                f3.write(zhaohan2 + '.com' + '\n')            for zhaohan3 in yq3:                print zhaohan3                f3.write(zhaohan3 + '.net' + '\n')        except:            print 'no found'            pass    f1.close()    f3.close()yqlj()#对爬行到的友情链接继续在查询旁站和C段,结果保存在urlx3.txt当中def zcpz():    f1 = open('urlx2.txt','r')    f2 = f1.readlines()    f3 = open('urlx3.txt','a+')    for uuu in f2:        urla = uuu.strip('\n')        try:            urlip = 'http://www.webscan.cc/?action=getip&domain=' + urla            r = requests.get(url=urlip,headers=headers,timeout=10)            zhaohan1 = re.findall('{"ip":"(.*?)",',r.content)            print zhaohan1            urlip2 = 'http://www.webscan.cc/?action=query&ip=' + ''.join(zhaohan1)            print urlip2            r1 = requests.get(url=urlip2)            zhaohan2 = re.findall('domain":"(.*?)",',r1.content)            for zhaohan3 in zhaohan2:                print zhaohan3                zhaohan4 = zhaohan3.replace('\\','')                f3.write(zhaohan4 + '\n')        except:            print 'no found'            pass    f3.close()zcpz()os.remove('urlx1.txt')os.remove('urlx2.txt')f5 = open('result.txt','a+')for neti in set( x for x in open( 'urlx3.txt' ).read( ).replace( '\n' ,' ' ).split( ' ' ) if x ):   #去除重复     f5.write(neti + '\n')f5.close()os.remove('urlx3.txt')print '===========================OVER======================================'time.sleep(10)  #最后只保留result.txt  删除了urlx123.txt  也可以不删除,用来查看

用一个原始url做测试后的运行结果,爬行出来了2988个url,如果一次几百个我都不敢去试.....


0 0
原创粉丝点击