xpath提取数据

1 篇文章 0 订阅
1 篇文章 0 订阅

继上一篇BeautifuSoup 提取数据,这里通过xpath提取元素,如果是xml格式的是一种提取方法,如果是html格式的也是一种提取方法,

from lxml import etree
xml = """
<book>
    <id>1</id>
    <name>野花遍地香</name>
    <price>1.23</price>
    <nick>臭豆腐</nick>
    <author>
        <nick id="10086">周大强</nick>
        <nick id="10010">周芷若</nick>
        <nick class="joy">周杰伦</nick>
        <nick class="jolin">蔡依林</nick>
        <div>
            <nick>惹了</nick>
        </div>
    </author>
    <partner>
        <nick id="ppc">胖胖陈</nick>
        <nick id="ppbc">胖胖不陈</nick>
    </partner>
</book>
"""
et = etree.XML(xml)
# result = et.xpath("/book") # /表示根节点
name = et.xpath("/book/name/text()")[0]  # 野花遍地香
nik = et.xpath("/book//nick")  # 两个/表示的是所有的子孙后代
snick = et.xpath("/book/*/nick/text()")  # 拿孙子辈的nick  *代表通配符 翻译可理解为book里面的谁都行
result = et.xpath("/book/author/nick[@class='joy']/text()")  # []表示属性筛选 @属性名=值
result1 = et.xpath("/book/partner/nick/@id")  # 最后一个/表示拿到nick里面的id的内容,@属性,可以直接拿到属性值
print(result1)

----------------------------------------------------------------------------------------------------------------------------

html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
        <title>Title</title>
</head>
<body>
    <ul>
        <li><a href="http://www.baidu.com">百度</a></li>
        <li><a href="http://www.Google.com">谷歌</a></li>
        <li><a href="http://www.sougou.com">s搜狗</a></li>
    </ul>
    <ol>
        <li><a href="plane">飞机</a></li>
        <li><a href="bike">自行车</a></li>
        <li><a href="car">轿车</a></li>
    </ol>
        <div class="cat">tom</div>
        <div class="mouse">jerry</div>
</body>
</html>
"""
et = etree.HTML(html)
# print(et.xpath("/html/body/ul/li[2]/a/text()"))  # [] 这个代表第几个,这句话的意思是拿到第二个li标签下a标签里面的文本,打印结果['谷歌']
li_list = et.xpath("/html/body//li")  # //表示所有子孙后代,这句话的意思是html标签下body标签里面所有标签下面的li标签
# print(li_list)
li_list1 = et.xpath("//li")
for li in li_list1:
    href = li.xpath("./a/@href")[0]  # 当前节点下a标签中href的内容
    text = li.xpath("./a/text()")[0]  # 当前节点下a标签中的文本
    print(href, text)
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用xpath提取新闻数据的步骤如下: 1. 首先,打开网页并使用开发者工具查看网页的源代码。 2. 使用xpath helper插件来练习xpath语法。点击插件图标,在弹出的窗口中,左边的框输入xpath语句,右边的框显示结果。 3. 使用xpath语法来定位需要提取的新闻数据的节点。可以使用标签、属性、文本内容等来定位节点。 4. 在xpath helper中输入xpath语句,查看结果,确保能够正确地定位到需要提取数据。 5. 在Python中使用lxml模块来提取数据。首先,导入lxml库,然后使用lxml的etree模块来解析网页源代码。 6. 使用etree模块的xpath方法,传入xpath语句来提取数据。可以使用xpath语句的结果直接作为提取数据,也可以进一步处理后再提取数据。 以下是一个使用xpath提取新闻数据的示例代码: ```python import requests from lxml import etree # 发送请求获取网页源代码 url = 'https://example.com/news' response = requests.get(url) html = response.text # 使用lxml的etree模块解析网页源代码 tree = etree.HTML(html) # 使用xpath语法提取新闻标题和内容 titles = tree.xpath('//div[@class="news-title"]/text()') contents = tree.xpath('//div[@class="news-content"]/text()') # 打印提取数据 for title, content in zip(titles, contents): print("标题:", title) print("内容:", content) print("------") ``` 请注意,上述代码仅为示例,具体的xpath语句和网页结构需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值