xpath解析:最常用且最便捷高效的一种解析方式

一、xpath解析原理:

  • 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
  • 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

二、环境的安装:

  • pip install lxml

三、如何实例化一个etree对象 from lxml.html import etree

1、将本地的html文档中的源码数据加载到etree对象中

etree.parse(filePath)

2、可以将从互联网上获取的源码数据加载到该对象中

etree.HTML('page_text')

3、xpath('xpath表达式')

四、xpath表达式

一个斜杠 / 表示的是从根节点开始定位,表示的是一个层级

两个斜杠 //  表示的是多个层级,可以表示从任意位置开始定位

属性定位:

/div[@class="song"]  #表示取到class为song的div,其中@是固定写法

#格式
tag[@attrName="attrVallue"]

索引定位:

//div[@class="song"]/p[3]
#表示取到class为song的div下的第三个p标签
#注意:这里的索引是从1开始的

取文本:

/text()  #获取的是标签中直系的文本内容

xpath('//div[@class="tang"]//li[5]/a/text()')[0]
#表示取到class为tang的div下的第五个li标签中的a标签的文本内容,因为类型是列表,需要加上[0]获取到最终的文本

//text()  #获取标签中非直系的文本内容(所有的内容)

取属性:

# 格式
/@attrName

//div[@class="tang"]/img/@src
#表示获取到class为tang的div下的img标签的src属性

# 爬取58二手房中的房源信息
import requests
from lxml.html import etree

if __name__ == '__main__':

    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    # 爬取到页面源码数据
    url = 'https://gz.58.com/ershoufang/'
    page_text = requests.get(url=url,headers=headers).text

    # 数据解析
    tree = etree.HTML(page_text)
    # 存储的就是li标签对象
    li_list = tree.xpath('//ul[@class="house-list-wrap"]/li')
    fp = open('58.txt','w',encoding='utf-8')
    for li in li_list:
        # 局部解析
        title = li.xpath('./div[2]/h2/a/text()')[0] # .表示解析的源码的参照标签
        print(title)
        fp.write(title+'
')
原文地址:https://www.cnblogs.com/nanjo4373977/p/12936973.html