简单的爬虫架构
调度端→URL管理器→网页下载器→网页解析器
网页解析器将有价值的数据传送到应用,无价值的返回给URL管理器
URL管理器
防止重复抓取,循环抓取
三种方式:
1.直接存放在内存
2.关系数据库(MySQL)
3.缓存数据看(redis)
网页下载器
将HTML以文件或字符串的形式存储
Python网页下载器有:
* urllib2 (Python官方基础模块)
* requests (第三方包,更强大)
python3中urllib 已经整合到一起,request也整合到urllib.request模块中了
urllib下载网页的三种方法:
import urllib.request #直接请求 resp = urllib.request.urlopen('http://www.baidu.com') #获取状态吗,200表示获取成功 print (resp.getcode()) #读取内容 cont = resp.read()
import urllib.request #创建对象 req = urllib.request.Request('http://www.baidu.com') #添加数据 urllib.request.data = ('a','1') #添加http的header req.add_header('User-Agent','Mozilla/5.0') #发送请求获取结果 resp = urllib.request.urlopen(req)
特殊情境处理:
1.需要用户登录才能访问(HTTPCookieProcessor)
2.需要代理才能访问(ProxyHandler)
3.协议使用HTTPS加密访问(HTTPSHandler)
4.URL自动跳转(HTTPRedirectHandler)
import urllib import http.cookiejar #创建cookie容器 cj = http.cookiejar.CookieJar() #创建1个opener op = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(op) #给urllib安装opener urllib.request.install_opener(opener) #使用带有cookie的urllib访问网页 resp = urllib.request.urlopen('http://www.baidu.com')
网页解析器
模糊匹配:
1.正则表达式(字符串);
结构化解析:
2.html.parser;
3.BeautifulSoup,拥有2、4功能;
4.lxml;