爬虫基本原理很好理解:
给出一个page,将其页面内所有link存入queue,queue是FIFO的队列,然后抓取页面内容进行筛选,筛选后取下一个link重复以上步骤。
此外,需要考虑是否有link已经爬过的问题,详见URL管理器。
1.URL管理器
有三种实现方式:
python内存——set()
关系数据库——urls(url, is_crawled)
缓存数据库——redis redis支持set()这种数据结构
待爬取、已爬取
2.网页下载器
将网页下载到本地,便于进一步分析和处理
urllib2 - python官方模块
request - 第三方模块
urllib2下载网页的三种方法:
# -*- coding: utf-8 -*-
import urllib2, cookielib
# Way 1: 直接下载
# response = urllib2.urlopen("www.baidu.com")
# print (response.getcode())
# cont = response.read()
# Way 2:
# request = urllib2.Request(url)
# request.add_data('a', '1')
# 伪装
# request.add_header('User-Agent', 'Mozilla/5.0')
# response = urllib2.urlopen(request)
# Way 3: 添加特殊情景的处理器
# HTTPCookieProcessor cookie
# ProxyHandler 代理
# HTTPSHandler https
# HTTPRedirectHandle 处理相互跳转
# 创建cookie容器
cj = cookielib.CookieJar()
# 创建1个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# 给urllib2安装opener
urllib2.install_opener(opener)
# 使用带有cookie的urllib2访问网站
response = urllib2.urlopen("http://www.baidu.com")
3.网页解析器
从网页中提取有价值数据的工具。
以html网页字符串为输入,输出有价值的数据和新的URL列表。
网页解析器:
正则表达式
自带插件:html.parser
第三方:Beautiful Soup
第三方:lxml
Beautiful Soup功能相对强大,可以调用html.praser和lxml;
正则表达式是模糊匹配,其他三者是结构化解析;
结构化解析—DOM树
document object model