爬虫常用数据提取方式:正则、xpath、beautifulsoup

文章目录

  • 1.正则re
  • 2.xpath
    • 2.1 定位
      • 2.1.1 xpath中选取节点的路径表达式
      • 2.1.2 xpath谓语,即[ ]中的内容
      • 2.1.3 选取未知节点
      • 2.1.4 选择多个路径
    • 2.2 获取文本
      • 2.2.1 获取标签内的文本
      • 2.2.2 获取属性值
  • 3. BeautifulSoup
    • 3.1 定位
    • 3.2 获取文本

        requests获取到网页源码之后,往往需要经过数据提取才能获得我们想要的数据,本文将介绍Python爬虫中常用的3中数据提取方式。
        正文开始之前,先说一个小tips,有时候requests.xxx.text直接获得的源码中,可能会出现中文乱码的情况,这一问题主要有两种解决方式:

  • method1:
response = requests.get() #或者post
response.encoding = 'uft-8'
page_text = response.text
  • method2:
    该方法只针对某一节点解析出来的中文发生乱码这种情况
str_refine = str_error_code.encode('iso-8859-1').decode('gbk')

        正文开始

1.正则re

        正则请戳这里
        Python的re模块请戳这里

2.xpath

        根据HTML标签来提取所需的数据。调用语法:

from lxml import etree
# 使用本地HTML实例化一个etree对象:
tree = etree.parse('filename')
# 使用requests获得的网页源码实例化一个etree对象:
tree = etree.HTML(page_text) #page_text是requests获得的网页源码

2.1 定位

2.1.1 xpath中选取节点的路径表达式

        /:绝对路径,可以看成选择子元素
        //:相对路径,可以看成选择后代元素
        .:选取当前节点
        ..:选取当前节点的父节点
        @:选取属性
        ❤️
        node.xpath('./div'):表示当前节点子元素中,所有div元素;
        node.xpath('.//div'):表示当前节点后代元素中,所有div元素;
        node.xpath('//div'):表示当前HTML页面中,所有div元素(注意是整个HTML页面哈,不论你node是在HTML的哪里)
        node.xpath('../@class'):获取当前节点的父元素的class属性值

2.1.2 xpath谓语,即[ ]中的内容

        数字n:表示第n个元素,索引从1开始,node.xpath(’./a[1]’)表示当前节点的所有a子元素中的第一个;
        last():表示最后一个元素,node.xpath(’./a[last()]’)表示当前节点的所有a子元素中的最后一个;
        last()-1:倒数第二个元素;
        position():表示选最前面的n-1个元素,node.xpath(’./a[position()<4]’)表示当前节点的前3个a 子元素;
        @属性名:表示含有该属性的元素,node.xpath(’./a[@href]’)表示当前节点中所有带有href属性a子元素
        @属性名="属性值

你可能感兴趣的:(spider,可视化,python,线性代数)