Python 爬虫之 --- Xpath 解析

16 篇文章 0 订阅
13 篇文章 0 订阅


1. Xpath 解析

xpath -> xml -> html
安装 lxml 包: #可能会失败,需要先安装 Microsoft Visual C++ Build Tools

pip install lxml
或者
pip install wheel -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install lxml -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

使用:

from lxml import etree
或者
from lxml import html
etree = html.etree

Python 扩展包网址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
安装 lxml 失败参考:#这些方式治标不治本,而且都可能不成功,主要靠玄学
https://blog.csdn.net/weixin_39999536/article/details/110527819
https://www.cnblogs.com/huodaihao/p/8094144.html
https://www.cnblogs.com/jhli/p/6217123.html
安装 Microsoft Visual C++ Build Tools:
https://zhuanlan.zhihu.com/p/126669852 #参照方法 3-1
以上方法我都试过,都没成功,可能和我 pycharm 版本低有关系,最后升级到了 python 3.10.1,pycharm 2021.3.1 解决。

2. 准备一个 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.sogou.com">搜狗</a></li>
   </ul>
   <ol>
      <li><a href="feiji">飞机</a></li>
      <li><a href="dapao">大炮</a></li>
      <li><a href="huoche">火车</a></li>
   </ol>
   <div class="job">李嘉诚</div>
   <div class="common">胡辣汤</div>
</body>
</html>

3. 写 py 文件

from lxml import etree
# from lxml import html
# etree = html.etree

# 需要加载准备解析的数据
f = open("test.html", mode="r", encoding='utf-8')
pageSource = f.read()

# 加载数据,返回element对象
et = etree.HTML(pageSource)

# xpath的语法
#result = et.xpath("/html")  # /html 代表根节点
#result = et.xpath("/html/body")      # /html 节点里面的 /body
#result = et.xpath("/html/body/span") # /body 里面的 span 标签
#result = et.xpath("/html/body/span/text()")    # text() 表示提取标签中的文本信息
#result = et.xpath("/html/body/*/li/a/text()")  # "*" 任意
#result = et.xpath("/html/body/*/li/a/@href")   # @表示属性
#result = et.xpath("//a/@href")  # // 表示任意位置
#result = et.xpath("//div[@class='job']/text()") # [@xx=xxxx] 属性的限定

# 带循环的
result = et.xpath("/html/body/ul/li")
for item in result:
    href = item.xpath("./a/@href")[0]   # ./ 表示当前这个元素
    text = item.xpath("./a/text()")[0]  # ./ 表示当前这个元素
    print(text, href)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值