以前对爬虫一知半解,知道看了一个视频课程后,才豁然开朗。本文从爬虫框架的角度来介绍。
爬虫的框架:
一个爬虫程序由URL管理器、网页下载器、网页分析器组成,下面分别介绍。
1、URL管理器:
URL管理器可以理解为存储URL的地方,包括初始的URL、已爬取的URL和待爬取的URL。一般有3种实现方式:
1) 内存
将URL 存储到set中,set可以清除重复的元素
2) 存储到mysql
建立urls表,urls(url, is_crawls)
3) 缓存数据库redis
待爬取的url:
已爬取的url:
由于redis的高性能,对于大型公司一般会用redis来存储,对于个人来说,用内存。
2、网页下载器
将互联网上的网页下载到本地,下载到本地后才能进行后续分析和处理。
Python有以下几种网页下载方式:
1)最简洁的方法:用python自带的库urllib2,示例如下:# -*- coding:utf-8 -*-
import urllib2
#直接请求
response = urllib2.urlopen('http://www.baidu.com')
#获取状态码,如果是200表示获取成功
print response.getcode()
#读取内容
cont = response.read()
print cont
2)
添加data,向服务器提交需要用户提交的数据,如url、data、header,交由urllib2的Request来处理。
# -*- coding:utf-8 -*-
import urllib2
#创建request对象
request = urllib2.Request('http://www.baidu.com')
#添加数据
#request.add_data('a','1')
#添加http的header,伪装为一个Mozilla访问
request.add_header('User-Agent', 'Mozilla/5.0')
#发送请求获取结果
response = urllib2.urlopen(request)
print response.getcode()
cont = response.readline()
print cont
3)添加特殊场景的处理器
有些网页需要cookies,或者代理proxy,或者HTTPS加密访问,或者url相互的处理调用关系。每种都有对应的库,调用这些库,填充参数后,最后用urlopen打开。
4)requests:第三方库,功能更强大
3、网页解析器
python有4种网页解析器,分别是正则表达式、html模块的parser、beautiful soup、lxml。在实际的应用中,正则表达式比较简单实用,Beautiful Soup可以和其他方法结合完成一个强大的功能。