python编写的简单爬虫程序
来源:互联网 发布:t.tt域名多少钱 编辑:程序博客网 时间:2024/06/04 19:38
本文目的:
从某个网站作为起点,爬虫获取到指定数目的图片、或者ftp资源;然后结束。
主要使用HTMLParser解析资源(开始使用SGMLParser,但是发现img标签不能解析出来,就换了这个)。
拷贝代码保存,python $文件名 就可以运行了。
使用时主要需要修改的就是HOST/URI (爬虫开始的URL),NUM_ALL(指定获取资源的数目,到这个数目之后停止,运行时可能有小的误差,会大于该数目),
import urllib2
import HTMLParser
IMGS=[]
URLS=[]
FTPURLS=[]
MODES={1:"IMG_MODE",2:"FTP_MODE",3:"URLS_MODE"}
##定义制定的资源类型
mymode=2 #获取FTP资源
NUM_ALL=100 #获取100个资源后停止
HOST="http://www.xiaopian.com"
URI="/html/gndy/jddy/20131109/103626.html"
originalUrl=HOST+URI ##从该页面开始获取资源
def myAddElement(myArr,element): ###该函数主要是为了在记录资源的时候,不要重复记录
if element in myArr:
return
else:
myArr.append(element)
class myparser(HTMLParser.HTMLParser): ###定义HTML解析函数
def __init__(self):
HTMLParser.HTMLParser.__init__(self)
def handle_starttag(self, tag, attrs):
if tag=="img": ##图片资源
for k,v in attrs:
if k=="src":
# IMGS.append(v)
myAddElement(IMGS,v)
elif tag=="a":
for k,v in attrs:
if "ftp:" in v or "thunder:" in v: ##ftp或者thunder资源
myAddElement(FTPURLS,v)
continue
if k=="href": ##页面中的http连接记录下来
if "#" not in v:
if "http:" not in v:
tmpstr=HOST+v
myAddElement(URLS,tmpstr)
elif "http" in v:
myAddElement(URLS,v)
def handle_endtag(self, tag):
# print "end tag name :" + tag
pass
def resert(self):
HTMLParser.reset(self)
##结束自己的解析类定义
def testmyparser(htmldata): ###解析html数据的函数
try:
parser=myparser()
parser.feed(htmldata)
parser.reset()
except:
print "may some coding error exists! go on"
def oneUrlParser(url): ##调用上一个函数,主要用来解析单个页面
print url
try:
oneUrlData=urllib2.urlopen(url).read()
except:
print "get url data exception"
return 0
testmyparser(oneUrlData)
def mysearch(url,MODEVALUE): ##调用上面一个函数,遍历第一个页面中获取到的urls进行解析,获取资源链接
MODE=MODES.get(MODEVALUE,'ERROR')
if MODES.has_key(MODEVALUE):
print "your input mode is: " + MODE + ", value is: " + str(MODEVALUE)
else:
print "[WARNGING]: You have input the wrong mode. Please try again. (IMG_MODE|FTP_MODE|URLS_MODE)"
return
oneUrlParser(url)
while(len(URLS)>0):
oneUrlParser(URLS[0])
del URLS[0]
if MODE=="IMG_MODE":
print len(IMGS)
if len(IMGS)>=NUM_ALL:
break
elif MODE=="FTP_MODE":
print len(FTPURLS)
if len(FTPURLS)>=NUM_ALL:
break
elif MODE=="URLS_MODE":
print len(URLS)
if len(URLS)>=NUM_ALL:
break
def printRes(MODEVALUE): ##打印获取到的资源结果
MODE=MODES.get(MODEVALUE,'ERROR')
if MODE=="IMG_MODE":
print IMGS
elif MODE=="FTP_MODE":
print FTPURLS
elif MODE=="URLS_MODE":
print URLS
else:
print "[ERROR]you must input the wrong mode"
mysearch(originalUrl,mymode)###开始检索
printRes(mymode)##打印结果
程序只根据自己的需要实现了对应的功能;暂未考虑其他场景下的应用~~
- python编写的简单爬虫程序
- 简单的Python爬虫程序
- python简单的爬虫程序
- Python与简单网络爬虫的编写
- Python与简单网络爬虫的编写
- python简单爬虫程序
- python编写网络爬虫程序
- 一个简单的python爬虫程序
- 一个简单的python爬虫程序
- 简单的Python网络爬虫程序
- 简单的Python爬虫刷访问量程序
- 一个简单的python爬虫程序
- 爬虫程序的简单介绍(Python)
- 如何用Python编写一个简单的爬虫
- 使用python语言结合beautifulsoup编写简单的网络爬虫
- python简单网络爬虫程序
- 编写简单的网络爬虫
- 利用QT编写一个简单爬虫程序
- (转)Android屏幕截图实现 (adbd部分)
- 【装机吧】教你使用XP系统修复功能
- 关于const(早就应该写的)
- shell:读取文件的每一行内容并输出
- DB Scan算法的分析与实现
- python编写的简单爬虫程序
- 【作废】share sdk 中一些分享问题、微信分享
- Java Web 项目SSO实战
- js中apply和call
- 空间搬家
- (转)Android Screenshooter
- 黑马程序员--Java基础加强(5)-- 泛型
- 分时系统的详细解释
- ligeruiGrid简单实例