python爬虫的几种数据提取方式:正则 ,bs4,pyquery,xpath,cssselector。
一,正则
提取数据步骤:创建正则对象-->匹配查找-->提取数据保存
<html>
<div><a href='www.baidu.com'>正则</a></div>
<div>111111</div>
<div><a href='www.baidu1.com'>正则1</a></div>
<div>222222</div>
<div><a href='www.baidu2.com'>正则2</a></div>
<div>333333</div>
<div><a href='www.baidu3.com'>正则3</a></div>
<div>444444</div>
</html>
例:提取所有a标签的文本
pattern = re.compile(r'<a.*?>(.*?)</a>’, re.S)
a_text = re.findall(pattern, html)
知识点:
findall 返回的结果是列表套元组的形式
而search一般要加group(), groups(),
re.S 可以将正则的搜索域不再是一行,而是整个HTML字符串
.*? 非贪婪匹配 .*贪婪匹配
二, Beautifulsoup
obj = BeautifulSoup(html, “lxml”)
BeautifulSoup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象
知识点:
获得标签的某个属性: .get()
获得标签内部的文字: .string . strings .stripped_strings .get_text()
.string: 如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容
.strings: 获取多个内容,返回结果是生成器,需要遍历获取
.stripped_strings输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings可以去除多余空白内容
通过css筛选元素: .select()
.select():返回的是list
遍历文档树:
获取tag的子节点: .contents 返回的是list .children返回的是listiterator object