Python 爬虫之 --- Xpath 解析

文章目录

  • 1. Xpath 解析
  • 2. 准备一个 html
  • 3. 写 py 文件


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>Titletitle>
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)

Python 爬虫之 --- Xpath 解析_第1张图片

你可能感兴趣的:(python,云计算,语法,python,爬虫,开发语言)