编写简单的网络爬虫 (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标段中铁二十局自购物资采购招标公告(二次公告)
标题名1:商洛市污水处理厂二期提标扩建项目
标题名2:商州区夜村镇杨塬小学综合楼
标题名3:商州区夜村镇刘一小学综合楼工程
标题名4:西成铁路客运专线(陕西段)XCZQ-8标段中铁二十局自购物资采购招标公告(二次公告)
这段代码只是个最简单的例子,需要抓取大量信息时,可以借助于文本或数据库存放。
四.运行爬虫程序时常见的问题和解决方法?
爬虫程序在对某一站点抓取信息时,会在短时间内发送大量的request,这时会出现很多问题。这里我总结了常见的几个问题谈谈,
(1)因访问频繁,主机IP被暂时屏蔽
例如,因为访问频率高被禁止访问,收到很多"403 Forbidden"的提示信息。 解决方法:伪装成user agent(如上面例子);使用代理;IP池等。
(2)爬取速度
单线程爬虫抓取速度慢,可能会由于网络延时是线程陷入阻塞。 解决方法:采用多线程实现。
(3)容错处理 如抓取页面不规整导入正则表达式找不出信息,延时,传输出错等各种错误。 解决方法:异常处理,提高健壮性;
五.搜索引擎的爬虫框架
网络爬虫是搜索引擎的核心。如上图,主要是维持两个队列:已抓取和未抓取。
六.爬虫附件
这里可以下载点评网爬虫。爬取"大众点评网"所有的酒店评分信息(酒店ID,用户ID,总评分,单项评分[房间、环境、服务],评分时间)。
这里是我最新上传的最简单的爬虫例子,初学者可以下载这个:爬取酒店名的简单爬虫。
六.爬虫附件
这里可以下载点评网爬虫。爬取"大众点评网"所有的酒店评分信息(酒店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. 网络爬虫浅析
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
- 编写简单的网络爬虫 (python3.2)
- 编写简单的网络爬虫
- Python与简单网络爬虫的编写
- Python与简单网络爬虫的编写
- 教你编写简单的网络爬虫
- 教你编写简单的网络爬虫
- 基于python3的网络爬虫
- 一个简单的python3爬虫
- 教你如何编写简单的网络爬虫
- 教你如何编写简单的网络爬虫
- 使用python语言结合beautifulsoup编写简单的网络爬虫
- 教你如何编写简单的网络爬虫
- 教你如何编写简单的Java网络爬虫
- 教你如何编写简单的网络爬虫
- Python网络爬虫4 ---- Linux下编写最简单的scrapy网络爬虫项目
- 为编写网络爬虫程序安装Python3.5
- 简单的网络爬虫
- Python3网络爬虫(一):利用urllib进行简单的网页抓取
- UVa 348 Optimal Array Multiplication Sequence (DP 最优矩阵链乘)
- linux shell
- The Python Conceptual Hierarchy
- xcode6 beta6.dmg 下载地址
- C语言位运算符
- 编写简单的网络爬虫 (python3.2)
- 欢迎光临我的博客
- ios构造httpPost头结构
- shell 变量
- 外部排序 之 概念篇
- 用SoapUI免费版测试OFBiz Web Servcies
- Oracle归档日志使用情况查询
- skylove888888的一个game:编了一个数字魔术的小程序
- 怎样构建一个GIT服务器(How to Construct A GIT Server)