正则使用的注意点
re.findall("a(.*?)b","str")
,能够返回括号中的内容,括号前后的内容起到定位和过滤的效果原始字符串r,待匹配字符串中有反斜杠的时候,使用r能够忽视反斜杠带来的转义的效果
点号默认情况匹配不到
\n
\s
能够匹配空白字符,不仅仅包含空格,还有\t|\r\n
xpath使用重点
- 使用xpath helper或者是chrome中的copy xpath都是从element中提取的数据,但是爬虫获取的是url对应的响应,往往和elements不一样
获取文本
a/text()
获取a下的文本a//text()
获取a下的所有标签的文本//a[text()='下一页']
选择文本为下一页三个字的a标签
@符号
a/@href
//ul[@id="detail-list"]
//
- 在xpath最前面表示从当前html中任意位置开始选择
li//a
表示的是li下任何一个标签
lxml使用注意点
lxml能够修正HTML代码,但是可能会改错了
- 使用etree.tostring观察修改之后的html的样子,根据修改之后的html字符串写xpath
lxml 能够接受bytes和str的字符串
提取页面数据的思路
- 先分组,渠道一个包含分组标签的列表
- 遍历,取其中每一组进行数据的提取,不会造成数据的对应错乱
正则如何进行非贪婪匹配,在div标签中的数据如何通过正则取出来
*?
+?
re.findall("<div class="a">.*?<div id="">(.*?)</div>",str)
返回列表,没有匹配到就是空列表
xpath如何获取文本,如何获取任意标签下的文本
a/text()
只能获取a下的文本a//text()
能够获取a下的和a包含的标签的文本a[text()="下一页"]
xpath如何获取属性,如何对标签进行定位
a/@href
div[@class='b']
xpath中//有什么用
//自最前面的时候,表示html中任意位置开始选择
div//* 放在节点后面的时候,能够选择当前节点下的所有的标签
xpath获取某一个或者某几个
//a[1]
第一个//a[last()]
最后一个//a[position()<=3]
//a[1]|//a[3]
lxml如何如何使用,如何把lxml处理之后的内容转化为字符串
- from lxml import etree
- element = etree.HTML(bytes、str) #把字符串转化为element对象
- etree.tostring(element) #把element对象转化为字符串
- element.xpath(“xpath_str”)