- 浏览: 111861 次
- 性别:
- 来自: 南昌
最新评论
最近为了更好的查询老王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()
#@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 下载,希望大家能够喜欢!
发表评论
-
python classmethod类方法
2013-06-04 21:23 782python classmethod类方法的要点主要有3个: ... -
分享python ASCII返回对应的值(chr)
2013-06-04 21:17 782比如我们知道大写的A的ASCII码为 65,小写a的ASCI ... -
分享python 判断对象是否可以调用(callable)
2013-06-04 21:12 699我们需要判断python中的对象是否可以调用,可以用内置方法 ... -
python unittest单元测试方法和用例
2013-06-04 21:08 1064python内部自带了一个单元测试的模块,pyUnit也就是 ... -
python 字典(dict)get方法应用
2013-06-03 22:14 804如果我们需要获取字典值的话,我们有两种方法,一个是通过dic ... -
python 正则表达式re findall
2013-06-03 22:13 965python 正则表达式 re findall 方法能够以列 ... -
python中文分词
2013-06-03 22:13 1004python做SEO相关事情,我 ... -
python yield和generators(生成器)
2013-06-03 22:12 736在python中,yield就是这样的一个生成器。 yie ... -
fabric 批量执行服务器任务和自动化运维管理
2013-06-03 22:12 854上节我们已经把fabric给 ... -
分享fabric的安装和配置
2013-05-23 20:04 900fabric的安装可以选择用python的pip安装或者eas ... -
分享python 私有属性和方法
2013-05-23 20:04 702python默认的成员函数和 ... -
python 怎么自定义异常
2013-05-23 20:03 843如果你需要自定义异常 ... -
分享python 字符串(string) format介绍和代码
2013-05-23 20:02 757你可以用字符串的format方法来格式化输出字符串。 比如; ... -
python 包的定义,结构,导入过程
2013-05-23 20:01 669假设你想设计一个模块集(也就是一个“python 包” ... -
分享python del语句的知识点
2013-05-15 20:27 750python del方法从列表中删除某个项目索引,这个和列表 ... -
python filter, map, 和reduce
2013-05-15 20:26 670filter(function, sequence):对se ... -
python pass (空操作)语句
2013-05-15 20:25 908pass语句通常什么都不做。它可以表示语句,但这个程序不需要 ... -
python break和continue语句
2013-05-15 20:25 764break语句,就像在C语言中,打破了最小封闭for或whi ... -
分享python range方法
2013-05-11 22:42 812如果你需要遍历一个数字序列,内置函数range()就派上用场 ... -
分享下python 字符串特点
2013-05-11 22:42 717除了数值,Python可以操作字符串,它可以表现在以下几个方 ...
相关推荐
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要涉及Python中的urllib模块以及与之相关的urllib2模块的安装过程。尽管标题中提到了urllib模块,但是内容部分却展示了requests库的安装过程。因此...
Python的urllib3库是Python标准库urllib的第三方扩展,提供了一套强大的HTTP客户端功能。这个库在处理网络请求时,特别是在并发请求和管理连接池方面,具有很高的效率和灵活性。下面我们将深入探讨urllib3的核心概念...
4. **urllib2** (仅在Python 2.x中): 在Python 2.x中,urllib2模块提供了一个更高级的接口,包含了request、error和一些其他功能,比如处理HTTP基本认证、代理等。但在Python 3.x中,这些功能被整合到urllib.request...
Python的urllib3和requests库是进行HTTP请求的两个常用工具,它们在Web开发、数据抓取、API交互等场景中扮演着重要角色。这里我们将深入探讨这两个库的特点、使用方法以及它们之间的区别。 首先,urllib3是Python的...
### Python的urllib2库详解及实例 #### 引言 `urllib2`是Python标准库中的一个强大工具,用于处理URLs的获取和解析。尽管在Python 3中已被`urllib.request`和`urllib.parse`等模块取代,但在Python 2中,`urllib2`...
总的来说,Python的urllib2模块提供了一种强大且灵活的方式来处理URL,包括发送HTTP请求、处理响应、编码和解码数据,以及处理多种网络协议。它在教育中扮演着重要角色,因为它是学习网络编程和Web开发的基础工具。...
### Python urllib2 模块详解 #### 一、引言 `urllib2` 是 Python 早期用于处理 URL 请求的标准库之一,在 Python 2.x 版本中广泛使用。随着 Python 3.x 的普及,该模块已被整合进 `urllib` 包中,并有所调整。...
总结起来,Python的urllib2模块提供了一套全面的工具,用于处理各种URL相关的任务,包括HTTP请求、响应处理、数据传输、认证、代理和cookie管理。通过灵活地组合不同的处理器和 opener,开发者可以构建出复杂的网络...
Python 爬虫基础之 Urllib 库 Python 的 Urllib 库是 Python 语言中最基本的网络请求库,提供了对 URL 的访问和处理能力。该库包含了多种功能,包括访问 URL、设置 headers、代理设置、超时时间设置等。 1. 访问 ...
Python的urllib2库是进行HTTP请求的重要工具,主要用于网络数据的抓取和交互。它提供了urlopen函数和Request类,使得开发者能够方便地发送GET和POST请求,并处理各种网络交互中的复杂情况。 1. `urlopen`函数是...
Python 网络爬虫开发基础教程:Python 的 urllib2 模块解析 Python 网络爬虫开发是指使用 Python 语言来开发网络爬虫程序,以便从互联网上抓取有价值的数据。Python 的 urllib2 模块是 Python 的一个标准库,提供了...
Python的Urllib库是进行网络数据获取的重要工具,尤其在编写爬虫程序时。它集成了多种处理URL的模块,方便开发者对网络资源进行高效、便捷的访问。在Python3中,Urllib库整合了Python2.7中的urllib和urllib2,形成一...
在这个特定的场景中,我们看到标题提到的是"pythonurllib模块下载图片共9页.pdf.z",这暗示了一个使用`urllib`下载图片的教程或指南,可能是一个PDF文档,共9页,被压缩为了一个`.zip`文件。虽然无法直接提供压缩...
### Python urllib 库详解 #### 一、引言 `urllib` 是 Python 的一个标准库,主要用于处理 URL 操作,比如抓取网页内容、解析 URL 和处理异常情况等。对于从事 Web 开发或者需要从互联网上抓取数据的开发者来说,`...
然而,需要注意的是,自Python 3.5起,`urllib2`已被`urllib.request`模块取代。但在Python 2.x版本中,`urllib2`仍然是主要的接口。 下面详细解释如何使用`urllib2`来发送HTTP POST请求: 1. **导入所需模块**: ...
知识点:Python的urllib2模块详解 一、引言与概述 urllib2是Python中的一个强大模块,专门用于从互联网上抓取URL资源。它不仅提供了基础的URL获取功能,还支持处理复杂的网络请求场景,如基本认证、代理设置、错误...