python爬虫学习笔记--xpath解析

python爬虫学习笔记--xpath解析


一、需求

此代码是学习波波老师python爬虫教学视频后所记笔记
对应视频: 波波老师B站视频[P24] 对应up为:路飞学城IT

笔记概要:
在各种情形下使用xpath获取数据的应用示例与解释,解释写在同行示例后面的备注里。


二、代码

1. 引入库

# -*- codeing = utf-8 -*-
# @Time: 2020/12/30 3:55
# @Author: Si
# @File: test_xpath解析01.py
# @Software: PyCharm

from lxml import etree

2. 示例代码

def main():
    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }
    #实例化好一个etree对象,并将被解析的数据加载进去
    parser = etree.HTMLParser(encoding='utf-8')         #在使用etree.parse时报错,原因:该方法默认使用的是“XML”解析器,所以如果碰到不规范的html文件时就会解析错误
    tree = etree.parse('baidu.html',parser=parser)      #所以需要自己创建html解析器,增加parser参数
    r = tree.xpath('/html/head/title')            # / 表示从根节点开始定位,一个 / 表示一个层级
    r = tree.xpath('/html/body/div')
    r = tree.xpath('/html//div')                  # // 表示多个层级
    r = tree.xpath('//div')                       # // 可以从任意层级开始定位
    r = tree.xpath('//div[@class="s_tab"]')       # 属性定位://div[@class="s_tab"] tag[@attrName="attrValue"]     attribute属性
    r = tree.xpath('//div[@class="s_tab"]/p[3]')  # 索引定位://div[@class="s_tab"]/p[3] 符合属性条件的div下的第三个p标签,索引是从1开始计数的
    r = tree.xpath('//div[@class="s_tab"]//li[5]/a/text()')[0]  #取文本: text()取到的,是以列表形式存储的,只有一个值,所以最后要用[0]来得到字符串形式的数据
    r = tree.xpath('//li[7]/text()')        #text()只获得li标签直系的文本,如果此时是想要li标签下的子标签的文本,而非li标签的直系文本,那么就什么也得不到
    r = tree.xpath('//li[7]//text()')         #所以用双杠 //text(),而不是单杠 /text(),注意直系文本与子标签下文本的区分
    r = tree.xpath('//div[@class="s_tab"]//text()')     #取一个标签下所有文本,但是,同时会把 \n \t 这样的空格和回车也取出来,因为这也算文本
    r = tree.xpath('//div[@class="s_tab"]/img/@src')    #取属性值:/@attrName,这样把img标签下的src属性提取了出来,是个jpg网址

    print(r)


if __name__ == '__main__':
    main()
    print('over')



结语

如果对代码有疑问或其他问题,欢迎评论告诉我,我会常来看 (毕竟面向CSDN编程) 。我也是一个刚刚学习python的新手,希望在疫情期间迎头赶上,欢迎大家一起讨论,共同进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值