爬虫-xpath学习

  1. xpath解析:最常用且最便捷高效的一种解析方式,具有通用性

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

  3. 环境的安装:pip install lxml

  4. 如何实例化一个etree对象:from lxml import etree
    一、将本地中的html文档中的源码数据加载到etree对象中:etree.parse(filePath)
    二、可以将从互联网上获取的源码数据加载到该对象中:etree.HTML(‘page_text’)
    三、xpath(‘xpath表达式’)

  5. xpath表达式
    /:表示的是从根节点开始定位,第一个/表示从根节点开始定位,其余/表示层级
    //:表示多个层级,可以表示从任意位置开始定位
    属性定位://div[@class=“song”]、tag[@attrName=“attrvalue”]
    索引定位://div[@class=“song”]/p[3] 索引从1开始
    取文本:1./text() 获取标签中直系的文本内容 2.//text() 获取标签下所有的文本内容
    取属性:/@attrName ==>img/src 获取属性值

import requests
from bs4 import BeautifulSoup
import re
from lxml import etree
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'
}

if __name__ == "__main__":
    # 实例化好了一个etree对象,且将被解析的源码加载到了该对象中
    tree = etree.parse('test.html')  # 传入本地html
    # 根据层级定位捕获内容
    # r = tree.xpath('/html/head/div')  # 函数返回的是一个列表,并不是title对应的html内容,而实一个element类型的对象
    # r = tree.xpath('/html//div')
    # r = tree.xpath('//div')  # 三个表达式对应的结果相同,//表示从任意位置开始定位
    # r = tree.xpath('//div[@class="song"]')  # 属性定位,获取class=song的一个div标签
    # r = tree.xpath('//div[@class="song"]/p[3]') # 获取点三个p标签,索引从1开始
    # r = tree.xpath('//div[@class="tang"]//li[5]/a/text')[0]  # 获取a标签里面的文本数据,只能获取直系标签里的文本内容,如果文本存在于其子标签,则无法获取
    # r = tree.xpath('//li[7]//text()')  # 获取标签下所有的文本内容
    r = tree.xpath('//div[@class="song"]/img/@src')  # 获取src所对应的属性值



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值