1.注册中国大学MOOC
2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程
3.学习完成第0周至第4周的课程内容,并完成各周作业
4.提供图片或网站显示的学习进度,证明学习的过程。
5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。
通过学习了《Python网络爬虫与信息提取》,明白了r.raise_for_status() : 如果不是200,产生异常requests.HTTPError,在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try-except进行异常处理,通用代码框架,可以使用户爬取网页变得更有效,更稳定、可靠。理解了PATCH和PUT的区别在于PATCH仅向URL提交UserName的局部更新请求,而采用PUT必须将所有20个字段一并提交到URL,未提交字段被删除。
Requests库的7个主要方法:
requests.request() |
构造一个请求,支撑以下各方法的基础方法 |
requests.get() |
获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() |
获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() |
向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() |
向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() |
向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() |
向HTML页面提交删除请求,对应于HTTP的DELET |
Requests库的异常:
异常 |
说明 |
requests.ConnectionError |
网络连接错误异常,如DNS查询失败拒绝连接等 |
requests.HTTPError |
HTTP错误异常 |
requests.URLRequired |
URL缺失异常 |
requests.ToolManyRedirects |
超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout |
连接远程服务器超时异常 |
requests.Timeout |
请求URL超时,尝试超时异常 |
网络爬虫容易引发的问题有几个方面:性能骚扰方面,受限于编写水平和目的,网络爬虫将会为web服务器带来巨大的资源开销;法律风险方面,服务器上的数据有产权归属,网路爬虫获取数据后牟利将带来法律风险;隐私泄露方面,网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄露个人隐私。
数据流的三个路径
路径1:
1)Engine从 Spider处获得爬取请求( Request);
2)Engine将爬取请求转发给 Scheduler,用于调度;
路径2:
3)Engine从 Scheduler处获得下一个要爬取的请求;
4)Engine将爬取请求通过中间件发送给 Downloader;
5)爬取网页后, Downloader形成响应( Response),通过中间件发给 Engine;
6)Engine将收到的响应通过中间件发送给 Spider处理;
路径3:
7)Spider处理响应后产生爬取项(scraped Item)和新的爬取请求( Requests)给Engine;
8)Engine将爬取项发送给Item Pipeline(框架出口);
9)Engine将爬取请求发送给Scheduler。
数据流的出入口
Engine控制各模块数据流,不间断从 Scheduler处获得爬取请求,直至请求为空。
框架入口: Spider的初始爬取请求
框架出口: Item Pipeline
ENGINE、SCHEDULER、DOWNLOAD模块功能已有实现,SPIDERS、ITEM PIPELINES模块有用户编写(配置)。
Requests函数包括十三个访问控制参数
requests.request(method,url,**kwargs)
**kwargs: 控制访问的参数,均为可选项
(1)params: 字典或字节序列,作为参数增加到url中
kv={'key1':'value1','key2':'value2'} r=requests.request('GET','http://python123.io/ws',params=kv) print(r,url)
(2)data: 字典、字节序列或文件对象,作为Request的内容
kv=('key1':'value1','key2':'value2') r=requests.request('POST','http://python123.io/ws',data=kv) body='主体内容' r=requests.request('POST','http://python123.io/ws',data=body)
(3)json: JSON格式的数据,作为Request的内容
kv={'key1':'value1'} r=requests.request('POST','http://python123.io/ws',json=kv)
(4)headers: 字典,HTTP定制头
hd={'user-agent';'Chrome/10'} r=requests.request('POST','http://python123.io/ws',headers=hd)
(5)cookies(是request库的高级功能): 字典或Cookie.Jar , Request中的cookie
(6)auth(是request库的高级功能): 元组, 支持HTTP认证功能
(7)files: 字典类型,传输文件
fs={'file': open('data.xls','rb')} r=requests.request('POST','http://python123.io/ws',files=fs)
⑧timeout: 设定超时时间,秒为单位
r=requests.request('GET','http://www.baidu.com',timeout=10)
⑨proxies: 字典类型,设定访问代理服务器,可以增加登录认证
⑩allow_redirects: True/False,默认为True,重定向开关
⑪stream: True/False,默认为True,获取内容立即下载开关
⑫verify: True/False,默认为True,认证SSL证书开关
⑬cert: 本地SSL证书路径