您的位置:首页 > 理论基础 > 计算机网络

编写简单的网络爬虫 (python3.2)

2014-08-25 22:30 621 查看
我这里分几个部分谈谈网络爬虫的原理,要求,并结合实际例子总结使用爬虫程序常见的问题以及对策。

一.网络爬虫的定义 

网络爬虫是一个自动提取网页的程序,它为搜索引擎从Web上下载网页,是搜索引擎的重要组成部分。通用网络爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL列表;在抓取网页的过程中,不断从当前页面上抽取新的URL放入待爬行队列,直到满足系统的停止条件。 

二.爬虫的原理

爬虫的原理相对简单,其爬取网页的基本步骤大致如下:1) 人工给定一个URL 作为入口,从这里开始爬取。    万维网的可视图呈蝴蝶型,网络爬虫一般从蝴蝶型左边结构出发。这里有一些门户网站的主页,而门户网站中包含大量有价值的链接。2) 用运行队列和完成队列来保存不同状态的链接。    对于大型数据量而言,内存中的队列是不够的,通常采用数据库模拟队列。用这种方法既可以进行海量的数据抓取,还可以拥有断点续抓功能。3) 线程从运行队列读取队首URL ,如果存在,则继续执行,反之则停止爬取。4) 每处理完一个URL ,将其放入完成队列,防止重复访问。5) 每次抓取网页之后分析其中的URL,将经过过滤的合法链接写入运行队列,等待提取。6) 重复步骤 3 )、4 )、5 )。

三.简单爬虫的实现

这里我用python 3中的urllib.request库实现了一个简单的爬虫,“陕西省建设工程招标投标管网”,首先分析网站的html代码归来,找出要抓取的部分,然后编写如下:import urllib.request import re ######################################################## # # fetch函数功能:抓取“陕西建筑招标网”的第一页“招标公告”页面,输出公告名字 # # 参数baseUrl是要访问的网站地址 # ######################################################## def fetch(baseUrl): # 第1步:模拟浏览器发送请求 data = urllib.request.urlopen(baseUrl).read() #二进制字节形式 data = data.decode('utf-8') # 第2步:页面返回后,利用正则表达式提取想要的内容 nameList=[] nameList = re.compile(r'target="_blank" title="(.*?)"',re.DOTALL).findall(data) # 第3步:返回在页面上析取的“标题名” return nameList ####### 执行 ######## if __name__ =="__main__": #要抓取的网页地址 url = "http://www.sxszbb.com/sxztb/jyxx/001001/MoreInfo.aspx?CategoryNum=001001" #存放到名字列表中 NameList = fetch(url) # 输出 NameList Length = len(NameList) for i in range(0, Length): print("标题名%d:%s\n"%(i+1, NameList[i]))
输出结果如下:>>>标题名1:商洛市污水处理厂二期提标扩建项目标题名2:商州区夜村镇杨塬小学综合楼标题名3:商州区夜村镇刘一小学综合楼工程标题名4:西成铁路客运专线(陕西段)XCZQ-8标段中铁二十局自购物资采购招标公告(二次公告)这段代码只是个最简单的例子,需要抓取大量信息时,可以借助于文本或数据库存放。

四.运行爬虫程序时常见的问题和解决方法?

爬虫程序在对某一站点抓取信息时,会在短时间内发送大量的request,这时会出现很多问题。这里我总结了常见的几个问题谈谈,
(1)因访问频繁,主机IP被暂时屏蔽
例如,因为访问频率高被禁止访问,收到很多"403 Forbidden"的提示信息。 解决方法:伪装成user agent(如上面例子);使用代理;IP池等。
(2)爬取速度
单线程爬虫抓取速度慢,可能会由于网络延时是线程陷入阻塞。       解决方法:采用多线程实现。
(3)容错处理
如抓取页面不规整导入正则表达式找不出信息,延时,传输出错等各种错误。   解决方法:异常处理,提高健壮性;

五.搜索引擎的爬虫框架

网络爬虫是搜索引擎的核心。如上图,主要是维持两个队列:已抓取和未抓取。

六.爬虫附件

这里可以下载点评网爬虫。爬取"大众点评网"所有的酒店评分信息(酒店ID,用户ID,总评分,单项评分[房间、环境、服务],评分时间)。 这里是我最新上传的最简单的爬虫例子,初学者可以下载这个:爬取酒店名的简单爬虫。

七.参考文档

1.《这就是搜索引擎——核心技术详解》  张俊林  电子工业出版社2.《python 核心手册》3. 爬虫基本原理:http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html4.   robots.txt   http://zh.wikipedia.org/zh-cn/Robots.txt5.   网络爬虫浅析


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: