继续进行书的第四章
上一章中,作者在实现抓取页面爬取时使用的是正则表达式,但是比较复杂。本章介绍就是一些解析库可以更简单的实现抓取页面。
4.1 使用Xpath
常用方法 etree.HTML etree.tostring () 输出修正后的HTML代码,但是结果是bytes形式 html.xpath()获取响应的路径 子节点 父节点 属性获取都比较简单 不再赘述
文本获取:如果想要获取子孙节点内部的所有文本,可以直接用//加text()的方式。这样可以保证获取得到最全面的文本信息。但是可能会夹杂一些换行符等特殊字符。如果想获取某些特定子孙节点下的所有文本,可以先选取到特定的子孙节点,然后再调用text()方法获取其内部文本,这样可以保证获取的结果是整洁的。
多属性匹配要用到contains 按序选择需要注意这和Python代码中的不同,序号是以1开头的,不是以0开始的。
4.2使用Beautiful Soup
前面介绍了正则表达式的相关用法,但是一旦正则表达式写的有问题,得到的可能就不是我们想要的结果了。而且对于一个网页来说,都有一定的特殊结构和层级关系,而且很多节点都有id或者class来作区分,所以可以借助它们的结构和属性来提取。
基本用法
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
节点选择器
直接调用节点的名称就可以选择节点元素,再调用string属性就可以得到节点内的文本了。
选择元素;提取信息(1.获取名称name 2.获取属性attrs 3.获取内容string);嵌套选择(子节点和子孙节点 父节点和祖先节点 兄弟节点 提取信息)
方法选择器
前面所讲的选择方法都是通过属性来选择,这种方法非常快,但是如果进行比较复杂的选择的话,就比较繁琐,不够灵活。
find_all(name, attrs, recursive, text, **kwargs) 返回所有的 find 返回第一个
CSS选择器因为不是非常熟悉,这里略过,如果后面用到了再来细读。