Python-爬虫学习笔记(二)
2018-02-09 11:53
316 查看
前言
数据提取
BeautifulSoup
信息标记三种形式
XML
JSON
YAML
形式解析
基本元素
标签树的遍历
友好的显示html内容
直接搜索
RE-正则表达式
基本语法
常见实例
基本使用
一种方法
另一种方法
match对象的方法
贪婪匹配和最小匹配
注意点
在学完了python的基础语法后,了解到机器学习还需要掌握一些python进阶知识:利用python爬取数据、数据分析与展示。
于是在网上找了许多教程,发现北理工嵩天老师的python进阶MOOC系列非常好,这几篇python学习笔记也是源于嵩天老师的《Python网络爬虫与信息提取》和《Python数据分析与展示》。
此系列笔记方便自己日后复习python相关知识,也供正在学习python的朋友作参考。
本篇笔记则记录了这两个库的一些使用方法。
目的:通过标记、或者直接搜索最终获得想要的内容(string)
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxkcc9oa7j30k60eyt9r.jpg)
标记比较繁琐,扩展性好
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnxkd8yafdj30su0g2q4q.jpg)
缺点:无注释
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxke57bpej30sw0jgabv.jpg)
可读性强,简洁,有注释
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxjmx4sn5j310y0jqtd1.jpg)
![](https://ws1.sinaimg.cn/large/006tNc79ly1fnxldl041jj30zo0je42p.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqoio2jj31es10cqab.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqrj6gkj31f00vcdmo.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqyukxtj31bm0t679z.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqtffu2zj31ak0qaaha.jpg)
![](https://ws4.sinaimg.cn/large/006tNc79ly1fnzqv4k6jqj31bc0gsdjy.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzr9i4knej31c80p2104.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzrjrgs29j319g0cg0vk.jpg)
针对于匹配后的match对象:
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzrjv50j5j319g0cgtb1.jpg)
![](https://ws4.sinaimg.cn/large/006tNc79ly1fnzrkipvtdj31by0noaeq.jpg)
所以用来爬虫的最好还是findall finditer
数据提取
BeautifulSoup
信息标记三种形式
XML
JSON
YAML
形式解析
基本元素
标签树的遍历
友好的显示html内容
直接搜索
RE-正则表达式
基本语法
常见实例
基本使用
一种方法
另一种方法
match对象的方法
贪婪匹配和最小匹配
注意点
前言
此次学习的主题是围绕机器学习所需的python库展开。在学完了python的基础语法后,了解到机器学习还需要掌握一些python进阶知识:利用python爬取数据、数据分析与展示。
于是在网上找了许多教程,发现北理工嵩天老师的python进阶MOOC系列非常好,这几篇python学习笔记也是源于嵩天老师的《Python网络爬虫与信息提取》和《Python数据分析与展示》。
此系列笔记方便自己日后复习python相关知识,也供正在学习python的朋友作参考。
数据提取
上篇笔记主要记录了爬取数据的方法库。但是爬取数据相对简单,而对已经爬取的数据内容的提取是重中之重。MOOC中主要介绍的处理方法是利用python的两个库:BeautifulSoup库、RE库。本篇笔记则记录了这两个库的一些使用方法。
BeautifulSoup
BeautifulSoup库中处理数据的方法主要分为形式解析和直接搜索两种。信息标记三种形式
信息分为信息标记和信息内容两部分,同样都很重要 #(标记,信息)目的:通过标记、或者直接搜索最终获得想要的内容(string)
XML
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxkcc9oa7j30k60eyt9r.jpg)
标记比较繁琐,扩展性好
JSON
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnxkd8yafdj30su0g2q4q.jpg)
缺点:无注释
YAML
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxke57bpej30sw0jgabv.jpg)
可读性强,简洁,有注释
形式解析
# 常用 from bs4 import BeautifulSoup soup = BeautifulSoup('r','html.parser') #r为获取的html内容
基本元素
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxjmx4sn5j310y0jqtd1.jpg)
soup.a.name soup.a.attrs soup.a.string #a是其中一个标签tag
标签树的遍历
# 下行遍历 <tag>.contents #返回一个列表,包含所有儿子节点 <tag>.children #返回一个迭代类型,所有儿子节点 <tag>.descendants #返回一个迭代类型,所有子孙节点 # 上行遍历 <tag>.parent #上一个父亲节点 <tag>.parents #迭代类型,所有父辈节点 #平行遍历 #必须是同一个父亲节点下才是平行 <tag>.next_sibling #一个 <tag>.previous_sibling #一个 <tag>.next_siblings #迭代 <tag>.previous_siblings #迭代 #迭代类型常用于循环语句中 <tag>.children <tag>.next_siblings 最常用,因为是同一个平台上
友好的显示html内容
soup.prettify() <tag>.prettify()
直接搜索
#最常用: <tag>.find_all() 即<tag>() soup.find_all(name,attrs,recursive,string,**kwargs) #name 标签名 ['a','b']表示同时搜索多个标签名 #attrs属性 #recursive 默认为True表示搜索子+孙 #string信息内容/字符串 这里面的搜索条件必须严格相同且全面,不能模糊化。 要想模糊化用正则表达式
![](https://ws1.sinaimg.cn/large/006tNc79ly1fnxldl041jj30zo0je42p.jpg)
RE-正则表达式
RE库对数据的处理主要通过直接搜索想获取的数据内容或者与BeautifulSoup库配合使用。基本语法
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqoio2jj31es10cqab.jpg)
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqrj6gkj31f00vcdmo.jpg)
常见实例
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqqyukxtj31bm0t679z.jpg)
基本使用
主要用于匹配字符串import re 注意点: 对于赋值的match对象,调用时: if match: …… 防止 4000 match是空值
一种方法
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzqtffu2zj31ak0qaaha.jpg)
![](https://ws4.sinaimg.cn/large/006tNc79ly1fnzqv4k6jqj31bc0gsdjy.jpg)
(r'',string,flags = 0) search #搜索所有 取第一个 match #搜索开头 取第一个 findall #搜索所有匹配的生成列表 finditer #搜索出所有匹配生成迭代类型 (r'',string,maxsplit = ,flags =0) (r'',repl,string,count = 0,flags=0) #简单:(r'',repl,string)
另一种方法
regex = re.compile(r'') #将语法句变为一个正则表达式对象
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzr9i4knej31c80p2104.jpg)
match对象的方法
针对于整个原信息:![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzrjrgs29j319g0cg0vk.jpg)
针对于匹配后的match对象:
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnzrjv50j5j319g0cgtb1.jpg)
贪婪匹配和最小匹配
![](https://ws4.sinaimg.cn/large/006tNc79ly1fnzrkipvtdj31by0noaeq.jpg)
注意点
re.的单个函数都是match类型所以用来爬虫的最好还是findall finditer
相关文章推荐
- Python爬虫学习笔记之BeautifulSoup入门
- Python学习笔记- 廖雪峰教程【python 2】//为继续学习爬虫准备-02 [待完善]
- python爬虫:下载百度贴吧图片(多页)学习笔记
- python学习笔记之爬虫之爬取百度贴吧某一帖子
- [Python]网络爬虫学习笔记,爬取东南大学SEU-wlan的流量使用情况
- Python爬虫(入门+进阶)学习笔记 1-6 浏览器抓包及headers设置(案例一:爬取知乎)
- Python爬虫学习笔记-1.Urllib库
- 【Python学习笔记(三)】:爬虫用到的知识点总结
- python学习笔记(6)--有道翻译爬虫
- (转)Python爬虫学习笔记(2):Python正则表达式指南
- python爬虫学习笔记
- python 爬虫学习笔记1
- Python爬虫学习笔记--MySQLdb模块
- python学习笔记(14)--爬虫下载漫画图片修改版
- 极客 | Python | 学习笔记01:Python 定向爬虫入门
- Python 爬虫学习笔记三:多页内容爬取&内容分析及格式化
- Python爬虫(入门+进阶)学习笔记 1-4 使用Xpath解析豆瓣短评
- Python爬虫学习笔记二:百度贴吧网页图片抓取
- Python爬虫学习笔记(1):简单的图片爬取
- [Python]网络爬虫学习笔记,爬取豆瓣妹子上妹子的照片