网络爬虫之简单链接抓取
2014-10-19 21:45
169 查看
继续用word编辑以后截图~
pdf版内容及对应代码位置:http://download.csdn.net/detail/duishengchen/8057129
# -*- coding: utf-8 -*- import re #导入正则表达式re 模块 import urllib2 import string #导入string模块 def saveUrl(urlSeed): #函数作用: #利用参数中的url网址,得到url对于的网页,然后抓取网页内容,获取网页之中的所有超链接及其对应的链接名字,保存在文本文件中。 website=urllib2.Request(urlSeed); #向网站请求访问 if (not website): #如果访问失败,那么说明网页有问题,跳出程序(下面的return),不执行下面的代码 return; webpage=urllib2.urlopen(website).read(); #打开网站(urlopen)并读取数据(read)这里把urlopen()和read()两个方法合在一起使用了。 pattern=re.compile(r"<a href=\".*?\".*?>.*?<\/a>"); #构建正则表达式 result=pattern.findall(webpage); #正则表达式匹配网页 for subweb in result: #result是一个列表[就像matlab中的矩阵] #print subweb; #打印网页,此处把它注释掉了 pattern2=re.compile(r"http.*?\""); #构造正则表达式2,获取网址 pattern3=re.compile(r">.*?<"); #正则表达式3,获取网址名字 weburl=pattern2.findall(subweb); #正则表达式2匹配 webname=pattern3.findall(subweb); #正则表达式3匹配 if len(weburl)>0 and len(webname)>0: #如果匹配的结果非空,即有结果,这里需要网址和名字都有结果,否则认为数据不符合 for name in webname: #因为名字里面有可能有多个结果,其中包括正确的”>名字<“,不正确的“><”, if len(name)>2: #因为错误的“><”长度为2,正确的“>网页名字<”长度必须大于2,所以以此为特征过滤错误的 forCheck=name[name.index('>')+1:name.index('<')];#利用切片方式去除名字头尾的‘>’和‘<’;可以用print name; 看是什么样子的。 pattern=re.compile('[%s]' % string.punctuation) #构造正则表达式检测名字里面是否包含标点符号, if not pattern.findall(forCheck): #如果不存在,认为是合格数据 print forCheck+':'+weburl[0][0:len(weburl[0])-1];#打印合格的数据,格式为: 网站名字+:号+地址; fpWrite=open("./web.txt",'a'); #以追加的方式打开文本文件,如果不存在,则创建 dataWrite= forCheck+':'+weburl[0][0:len(weburl[0])-1]+'\r\n';#构建即将写入的数据格式(跟打印的格式一样) fpWrite.write(dataWrite); #把数据写入文件 fpWrite.close(); #关闭文件 def run(urlSeed): #函数作用,根据给定的urlSeed,获取第一批超链接,写入文本文件; #然后,以第一批网址为基础,依次抽取每一行的地址作为新的url,获取另一批新的url,以此反复循环,直到用户按下终止键(ctrl+z),停止程序。 saveUrl(urlSeed);#调用上面的函数;获取第一批的网址 fpRead=open("./web.txt",'r');#打开第一批的文本文件, while(1): #死循环 try: dataRead=fpRead.readline();#从打开的文件中读取一行 pattern=re.compile(r"http.*");#构造正则表达式 newUrl=pattern.findall(dataRead);#利用正则表达式从读入的行中获取网址 saveUrl(newUrl[0]);#将新的网址作为参数,获取新的一批网址 except KeyboardInterrupt: #如果检测到键盘中断异常,说明用户按下了Ctrl+Z fpRead.close(); #关闭读写文件 print "\n爬虫执行完成!\n" #打印退出结果 return; #退出程序 except Exception,e: #如果是其他异常,不理它们 continue; #跳过异常,继续运行 fpRead.close(); #关闭文件 #下面是程序的入口,程序调用run函数开始运行,传入种子url(这里以淘宝为例)。 run("http://www.taobao.com");
pdf版内容及对应代码位置:http://download.csdn.net/detail/duishengchen/8057129
相关文章推荐
- 使用Python编写简单网络爬虫抓取视频下载资源
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- Python实现抓取页面上链接的简单爬虫分享
- Java简单实现爬虫技术,抓取整个整个网站所有链接+图片+文件(思路+代码)
- Python实现抓取页面上链接的简单爬虫分享
- 使用Python编写简单网络爬虫抓取视频下载资源
- Python数据抓取(2) —简单网络爬虫的撰写
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- 网络爬虫初步:从一个入口链接开始不断抓取页面中的网址并入库
- 网络爬虫初步:从一个入口链接开始不断抓取页面中的网址并入库
- 使用Python编写简单网络爬虫抓取视频下载资源
- Python实现抓取页面上链接的简单爬虫分享
- 使用Python编写简单网络爬虫抓取视频下载资源
- [Python学习] 简单网络爬虫抓取博客文章及思想介绍
- Python实现抓取页面上链接的简单爬虫分
- Java简单的网络爬虫实现
- python 简单的网络爬虫 + html 正文抽取
- 一个简单的java网络爬虫(spider)