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

来源:互联网 发布:linux下源码安装mysql 编辑:程序博客网 时间:2024/05/21 13:21
我这里分几个部分谈谈网络爬虫的原理,要求,并结合实际例子总结使用爬虫程序常见的问题以及对策。

一.网络爬虫的定义 


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


二.爬虫的原理


爬虫的原理相对简单,其爬取网页的基本步骤大致如下:

1) 人工给定一个URL 作为入口,从这里开始爬取。

万维网的可视图呈蝴蝶型,网络爬虫一般从蝴蝶型左边结构出发。这里有一些门户网站的主页,而门户网站中包含大量有价值的链接。

2) 运行队列完成队列来保存不同状态的链接。

    对于大型数据量而言,内存中的队列是不够的,通常采用数据库模拟队列。用这种方法既可以进行海量的数据抓取,还可以拥有断点续抓功能。

3) 线程从运行队列读取队首URL ,如果存在,则继续执行,反之则停止爬取。

4) 每处理完一个URL ,将其放入完成队列,防止重复访问。

5) 每次抓取网页之后分析其中的URL,将经过过滤的合法链接写入运行队列,等待提取。

6) 重复步骤 3 )、4 )、5 )。

三.简单爬虫的实现

这里我用python 3中的urllib.request库实现了一个简单的爬虫,“陕西省建设工程招标投标管网”,首先分析网站的html代码归来,找出要抓取的部分,然后编写如下:
import urllib.requestimport 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.html
4. robots.txt http://zh.wikipedia.org/zh-cn/Robots.txt
5. 网络爬虫浅析

                                             
3 0
原创粉丝点击