最近为了更好的查询老王python的外链,所以准备写一个python urllib2 查询脚本来查询,一般查询外链比较准确的工具还是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,本文地址:http://www.cnpythoner.com/post/121.html
作者:老王@python python 教程
老王python,提供python相关的python 书籍,python 主机,django 教程和python 下载,希望大家能够喜欢!
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com