正则使用的注意点

  • 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”)