1.注册中国大学MOOC
2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程
3.学习完成第0周至第4周的课程内容,并完成各周作业
4.提供图片或网站显示的学习进度,证明学习的过程。
5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。
经过了几天的学习,对《Python网络爬虫与信息提取》这课程进行回顾,和整理。
第一周,学习了Requests库的安装,Requests库的主要方法及对象和属性。列如:
1.requests.request():构造一个请求
2.requests.get():获取html网页
3.request.head():获取html网页头信息
4.request.post():向html网页提交post请求
5.request.put():向html网页提交put请求
6.request.patch():向html网页提交局部修改请求
7.request.delete():向html提交删除请求
HTTP协议对资源的操作。列如:
1.GET:请求获取URL位置的资源
2.HEAD:请求获取URL位置资源的响应消息报告
3.POST:请求向URL位置的资源后附加新的数据
4.PUT:请求向URL位置存储一个资源,覆盖原URL位置的资源
5.PATCH:请求局部更新URL位置的资源,覆盖原URL位置的资源
6.DELETE:请求删除URL位置存储的资源
还介绍了网络爬虫所引发的问题及限制。列如:
问题:
1.骚扰问题:受限于编程水平和目的,网络爬虫将会为web服务器带来巨大的资源开销。
2.法律风险:服务器上的数据有产权归属,网络爬虫获取数据后牟利将会带来法律风险。
3.隐私泄露:网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄露个人隐私。
对爬虫限制:
1.来源审查:判断User-Agent进行限制
2.发布Robots公告
第二周,详细介绍了Beautiful Soup,解析器分别有:html.parser, lxml, xml, html5lib
BeautifulSoup类的基本元素:
1.Tag:标签,最基本的信息组织单元,分别用<>和>表明开头和结尾
2.Name:标签的名字,
的名字是'p',格式:3.Attributes:标签的属性,字典的组织形式,格式:
4.NavigableString:标签内非属性字符串,<>...>中的字符串,格式:
5.Comment:标签内字符串的注释部分,一种特殊的Comment类型
标签树的遍历:
上行遍历:
(1).parent:节点的父亲标签
(2).parents:节点先辈标签的迭代类型,用于循环 遍历先辈节点
下行遍历:
(1).contents:子节点列表,将
(2).children:子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
(3).descendants:子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
平行遍历:
(1).next_sibling:返回按照HTML文本顺序的下一个平行节点标签
(2).previous_sibling:返回按照HTML文本顺序的上一个平行节点标签
(3).next_siblings:迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
(4).previous_siblings:迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
信息提取的一般方法:
(1)完整解析信息的标记形式,再提取关键信息。XML,JSON,YAML
需要标记解析器,如bs4库的标签树遍历,优点是信息解析准确,缺点是提取过程繁琐
(2)无视标记信息,直接搜索关键信息。搜索
使用对信息的文本查找函数即可。优点是提取过程简洁,速度快,缺点是提取信息的准确性与信息内容直接相关。
第3周介绍的是正则表达式语法由字符和操作符构成和re库主要功能函数,经典正则表达式:
1.^[A-Za-z]+$:由26个字母组成的字符串
2.^[A-Za-z0-9]+$:由26个字母和数字组成的字符串
3.^-?\d+$:整数形式字符串
4.^[0-9]*[1-9][0-9]*$:正整数形式字符串
5.[1-9]\d{5}:中国境内邮政编码
6.[\u4e00-\u9fa5]:匹配中文字符
7.\d{3}-\d{8}|\d{4}-\d{7}:国内电话号码:010-68913536
8.(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]):IP地址
正则表达式的类型
1.raw string类型(原生字符串类型,不包含转义符的类型):r'text', 如r'\d{3}-\d{8}|\d{4}-\d{7}'
2.string类型,将\理解为转义符,使用更繁琐:如'\\d{3}-\\d{8}|\\d{4}-\\d{7}'
当正则表达式包含转义字符,使用raw string类型 ,经过这次学习知道了许多基础算法都有规范的写法。
Re库主要功能函数:
1.re.search(pattern,string,flags=0):在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
2.re.match(pattern,string,flags=0):从一个字符串的的开始位置起匹配正则表达式,返回match对象
3.re.findall(pattern,string,flags=0):搜索字符串,以列表类型返回全部能匹配的字符串
4.re.split(pattern,string,maxsplit=0,flags=0):将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
5.re.finditer(pattern,string,flags=0):搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
6.re.sub(pattern,repl,string,count=0,flags=0):在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串
第4周讲解的是网络爬虫的框架,框架结构:
1.Engine:框架核心,控制所有模块之间的数据流;根据条件触发事件。
2.Downloader:根据请求下载网页
3.Scheduler:对所有爬取请求进行调度管理
4.Downloader Middleware:实施Engine、Scheduer和Downloader之间进行用户可配置的控制修改、丢弃、新增请求或响应
5.Spider:解析Downloader返回的响应产生爬取项,产生额外的爬取请求
6.Item Piplines:以流水线方式处理Spider产生的爬取项操作包括:清理,检验,查重,存储数据
7.Spider Middleware:对请求和爬取项再处理
通过这几个天的学习,对这门课程也有了一定的了解,但是实践还完全不过,许多问题还要解决。