1.bs4的运用
流程:
1.导入相应的模块:from bs4 import BeautifulSoup
2.实例化一个 BeautifulSoup 对象,并将我们要解析的数据加载到该对象中:soup = BeautifulSoup('要解析的数据','lxml(解析器)')
3.定位标签:(1).通过标签名定位:soup.标签名 第一个标签
(2).通过标签名和属性定位soup.find('标签名',attr = {'属性名':属性值}) 返回的是查询到的第一个标签
soup.findAll('标签名',attr = {'属性名':属性值}) 返回的一个由所有结果构成的列表
(3). 通过选择器定位:select('selector')其中selector像css那样的层级关系eg:('.card > h1 > a ')返回的也是一个列表
4.数据的提取:要注意的是findAll与select返回的都是列表,所有我们必须确定到要提取的某个标签
(1)string:取出标签直系的文本内容
. (2)text:取出标签中所有的文本内容
(3)标签名['属性名']:获取属性的值
5.爬取一个小说实例:https://www.cnblogs.com/KingOfCattle/p/12907968.html
2.xpath的运用:
流程:
(1). 导入相应的模块:from lxml import etree
(2).实例化etree对象,并将我们要解析的数据加载到该对象中:解析本地etree.parse('要解析的数据'),解析爬取的数据etree.HTML('要解析的数据')
(3).该对象结合xpath表达式进行提取数据,获取的数据都存储在列表里面了
xpath表达式: 1.表示一个层级,但是/在最左边的时候表示从根标签开始定位
2.//跳多个层级,最左边的时候表示从任意地方开始定位
3.属性定位://标签名[@属性名='属性值']
4.索引定位://标签名[index],index索引是从1开始
5.模糊定位模糊匹配:
//div[contains(@class, "ng")] 定位到class属性值中包含ng的div标签
//div[starts-with(@class, "ta")] 定位到class属性值中是以ta开头的div标签
数据的提取:
/text() 获取值系内容
//text() 获取所有的内容
/@属性名 获取属性值