各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料!
解析网页的三种解析方式:
- re解析
- bs4解析
- xpath解析
正则表达式, 一种使用表达式的方式对字符串进行匹配的语法规则.
正则的优点: 速度快, 效率高, 准确性高
正则的缺点: 新手上手难度有点儿高.
正则的语法: 使用元字符进行排列组合用来匹配字符串
在线测试正则表达式https://tool.oschina.net/regex/
链接: 在线测试正则表达式
元字符: 具有固定含义的特殊符号。
- 常用元字符如下:
- . 匹配除换行符以外的任意字符
- w 匹配字母或数字或下划线
- s 匹配任意的空白符
- d 匹配数字
- 匹配一个换行符
- 匹配一个制表符
- ^ 匹配字符串的开始
- $ 匹配字符串的结尾
- W 匹配非字母或数字或下划线
- D 匹配非数字
- S 匹配非空白符
- a|b 匹配字符a或字符b
- () 匹配括号内的表达式,也表示一个组
- […] 匹配字符组中的字符
- [^…]匹配除了字符组中字符的所有字符
量词: 控制前⾯的元字符出现的次数
- 1.* 重复零次或更多次
- 2.+ 重复一次或更多次
- 3.? 重复零次或一次
- 4.{n} 重复n次
- 5.{n,} 重复n次或更多次
- 6.{n,m} 重复n到m次
贪婪匹配和惰性匹配
- .* 贪婪匹配
- .*? 惰性匹配
- findall 查找所有. 返回list
- search 会进行匹配. 但是如果匹配到了第一个结果. 就会返回这
个结果. 如果匹配不上search返回的则是None
- match 只能从字符串的开头进行匹配
- finditer, 和findall差不多. 只不过这时返回的是迭代器(重点)
- compile() 可以将一个正则进行预加载. 方便后面的使用
- 正则中的内容如何单独提取?单独获取到正则中的具体内容可以给分组起名字
这里可以看到我们可以通过使用分组. 来对正则匹配到的内容进
一步的进行筛选.
目标: 抓取"电影名称",“上映年份”,“评分”,"评分人数"四项内容.怎么做呢?
首先, 先看一下页面源代码. 数据是否是在源代码上的?很明显, 我们想要的数据全部都在页面源代码中体现了. 接下来第一步了. 拿到⻚面源代码,然后呢. 从⻚面源代码中提取我们需要的内容. 这时候我们就可以去写正则了.
开始匹配, 将最终完整的数据按照自己喜欢(需要)的方式写入文件.
bs4解析比较简单, 但是呢, 首先你需要了解一丢丢的html知识. 然后再去使用bs4去提取, 因为bs4就是通过html标签和属性去定位⻚面上的内容的。
<标签 属性=“值” 属性=“值”>
被标记的内容
</标签>
在python中我一般只推荐用pip进行安装. 原因: 简单!!!
bs4在使用的时候就需要参照一些html的基本语法来进行使用了. 我们直接上案例. 案例是最能直观的展现出bs4的便捷效果的.
我们来尝试抓取链接: link
http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml
老规矩, 先获取⻚面源代码. 并且确定数据就在⻚面源代码中~
将⻚面源代码丢给BeautifulSoup, 然后我们就可以通过bs对象去检索⻚面源代码中的html标签了
BeautifulSoup对象获取html中的内容主要通过两个方法来完成
基本上有这两个方法就够用了. 不论是find还是find_all 参数几乎是一致的.
语法:
- find(标签, 属性=值)
意思是在页面中查找 xxx标签, 并且标签的xxx属性必须是xxx值
例:find(‘div’, age=18) 含义: 在⻚面中查找div标签, 并且属性age必须是 18的这个标签.
find_all()的用法和find()几乎一致.
find()查找 1 个. ,find_all()查找⻚面中所有的.
好了, 用法说完了. 接下来就回来看怎么抓取新发地的价格吧
接下来就可以进一步去提取数据了. 后面的直接给出完整代码.因为逻辑都是一样的. 并没有多么的复杂, 过程就省略了.
有人可能要问了. 为什么只有第一⻚数据. 你观察一下第二⻚, 第
三⻚的url就明白了了
我们以优美图库作为本节课的案例。
链接:优美图库https://www.umei.cc/bizhitupian/weimeibizhi/
我需要在网站的首⻚中, 找到子⻚面的链接, 然后请求到子⻚面, 才能看到图片>也就是说, 想要下载该网站图片(高清大图), 需要三步,
第一步, 在主⻚面中拿到每一个图片的子⻚面链接
第二步, 在子⻚面中找到真正的图片下载地址
第三步, 下载图片
1.拿到子⻚面链接
2.获取到子页面信息, 找到下载图片的图片路径
- 下载图片