博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python urllib2查询数据
阅读量:7235 次
发布时间:2019-06-29

本文共 2551 字,大约阅读时间需要 8 分钟。

最近为了更好的查询老王python的外链,所以准备写一个来查询,一般查询外链比较准确的工具还是yahoo的外链工具,但是有点不方便的就是,yahoo查出的外链要一页一页的翻,好累而且不好方便统计,我是想把网站的外链全部读取到文件里,这样比较好在本地来进行统计。

废话不说,上脚本吧。

#encoding=utf-8
#@author:老王python
#@description:检查网站的外链
import  urllib
from  sgmllib  import  SGMLParser
import  re
import  sys
infolist  =  {} #结果列表
class  LinkParser( SGMLParser ):
     '''抓取link列表的信息'''
     def  reset( self ):
         SGMLParser . reset( self)
         self . url  =  '' #链接文本
         self . li_check  =  0
         self . a_check  =  0
         self . jt_url  =  '' #具体url
         self . infolist  =  {}
     def  start_li( self ,  tag ):
         '''检测li开头'''
         if  tag :
             if  tag [ 0 ][ 1 ]  ==  'sco5li0'  or  tag [ 0 ][ 1 ]  ==  'sco5li1' :
                     self . li_check  =  1
     def  start_a( self , tag ):
         '''检测a开头'''
         if  self . li_check  ==  1 :
             if  not  tag [ 0 ][ 1 ] . startswith( 'http://203.209.253.250' ):
                 host_re   =  re . compile( r'^https?://(.*?)($|/)' , 
                     re . IGNORECASE
                )                
                 self . url  =  host_re . search( tag [ 0 ][ 1 ]) . group( 1)
                 self . jt_url  =  tag [ 0 ][ 1 ]
                 self . a_check  =  1
     def  handle_data( self ,  text ):
         '''处理空白文本'''
         txt  =  text . strip()
         if  txt  and  self . a_check  and  txt  !=  '快照' :
             checkurl  =  ' %s , %s '  % ( self . url , self . jt_url)
             self . infolist [ checkurl ]  =  txt
            
         if  txt  ==  '' :
             return
        
     def  end_li( self ):
         self . li_check  =  0
        
     def  end_a( self ):
         self . a_check  =  0
numre  =  re . compile( r'<strong>.+') #匹配总的记录数
pnum  =  re . compile( r'\d+')
checkurl  =  ''#查询网站的地址,比如http://www.xxx.com
checkurl  =  urllib . quote( checkurl) #请求地址
pageurl  =  'http://sitemap.cn.yahoo.com/search?bwm=i&bwmo=d&p= %s '  % ( checkurl)
content  =  urllib . urlopen( pageurl) . read()
c  =  numre . search( content) . group( 0)
totalnum  =   int( pnum . search( c) . group( 0)) #总的外链数
host_re   =  re . compile( r'^http://(?P<host>www\.(?:[A-Z0-9-]+\.){1}[A-Z\.]{2,6})$' , 
     re . IGNORECASE
)
pagesize  =  50 #一页显示50条
if  totalnum  %  pagesize :
     page  =  totalnum / pagesize
else :
     page  = ( totalnum / pagesize) + 1
f  =  file( 'a.txt' , 'w')
for  k  in  xrange( page ):
     parser  =  LinkParser()
     url  =  'http://sitemap.cn.yahoo.com/search?bwm=i&bwmo=d&p= %s &b= %s '  % ( checkurl , k * 50)
     print  'url=========>' , url
     cstr  =  urllib . urlopen( url) . read()
     parser . feed( cstr)
     parser . close()
    
     for  m  in  parser . infolist :
         domain , jt_url  =  m . split( ',')
         print  'domain--------->' , domain
         print  'jt_url--------->' , jt_url
         t  =   'url: %s ,jt_url: %s ,title: %s \n '  % ( domain , jt_url , parser . infolist [ m ] . decode( 'utf-8') . encode( 'utf-8'))
         f . write( t)
f . close()

原创文章请注明转载自老王python,本文地址:

作者:老王@python python 教程
老王python,提供python相关的python 书籍,,django 教程和,希望大家能够喜欢!

转载于:https://www.cnblogs.com/wanpython/archive/2012/08/08/2629033.html

你可能感兴趣的文章
华山论剑之iOS&tableView的双剑合璧
查看>>
4K超清,2500万人在线,猫晚直播技术全解读
查看>>
编译时注解 ButterKnife源码分析和手写
查看>>
人人都能学会的python编程教程2:数据类型和变量
查看>>
iOS开发: CocoaPods远程私有仓库的维护-添加子库
查看>>
【Python3网络爬虫开发实战】3-基本库的使用-3正则表达式
查看>>
支持获取 6.0+设备正在运行程序信息
查看>>
使用 Acorn 来解析 JavaScript
查看>>
如何下载、安装eclipse
查看>>
流计算框架 Flink 与 Storm 的性能对比
查看>>
JavaScript数据类型AND深拷贝和浅拷贝的不归路
查看>>
iOS逆向之旅(进阶篇) — HOOK(FishHook)
查看>>
Gradle 3.0.0设置Apk文件输出命名
查看>>
mac 使用php storm的基本配置
查看>>
装饰者模式
查看>>
集成计算引擎在大型企业绩效考核系统的应用方案
查看>>
150. Evaluate Reverse Polish Notation
查看>>
SpringBoot 实战 (十一) | 整合数据缓存 Cache
查看>>
css实现三栏布局的几种方法及优缺点
查看>>
proxychains是怎么工作的
查看>>