Python爬虫---解析---xpath

1.1  安装xpath: 点击安装Xpath 

Python爬虫---解析---xpath_第1张图片

1.2  将安装好的程序解压,打开浏览器,找到程序扩展,把解压好的程序托进来,如下图所示:

Python爬虫---解析---xpath_第2张图片

1.3  设置快捷键:打开/关闭xpath

Python爬虫---解析---xpath_第3张图片

1.4  成功后的图例:按刚刚设置的快捷键 ctrl+shift+x

Python爬虫---解析---xpath_第4张图片

使用例子 : 在QUERY里输入xpath语法(下文有讲解),RESULTS (1)可以校验是否正确

Python爬虫---解析---xpath_第5张图片 

2.1 安装 lxml 库:pip install lxml -i https://pypi.douban.com/simple 

注意:需要安装在python解释器相同的位置

2.2  导入:from lxml import etree

2.3  使用

1.路查询:   1)//: 查找所有子孙节点,不考虑层级关系  2) / : 找直接子节点
2.谓词查询: 1)//div[@id]   2)//div[@id="idname"]
3.属性查询: 1)//@class
4.模糊查询: 1)//div[contains(@id,"he")]   2)//div[starts-with(@id,"he")] I
5.内容查询: 1)//div/h1/text()
6.逻辑运算   1)//div[@id="idname”and @class="classname"] 与  2)//title| //price  或

1)xpath解析本地文件    # etree.parse("xx.html)
2)xpath解析服务器响应的数据  # etree.HTML(response.read().decode("utf-8))

from lxml import etree

# xpath解析
# 1)本地文件    # etree.parse("xx.html)
# 2)服务器响应的数据 response.read().decode("utf-8")  # etree.HTML(response.read().decode("utf-8))

# xpath解析本地文件
tree = etree.parse("1218-解析-xpath的基本使用.html")
print(tree)

# xpath基本语法:tree.xpath("xpath路径")
li_list = tree.xpath("//ul/li")  # 查找ul下面的li  子节点
li_list1 = tree.xpath("//body//li")  # 查找body下面的li  子孙节点
li_list2 = tree.xpath("//ul/li[@id]")  # 查找所有有id的属性的li标签
li_list3 = tree.xpath("//ul/li[@id]/text()")  # 查找所有有id的属性的li标签文本
li_list4 = tree.xpath("//ul/li[@id='l1']/text()")  # 查找所有有id为l1的属性的li标签文本
li_list5 = tree.xpath("//ul/li[@id='l1']/@class")  # 查找到id为l1的li标签的class的属性值
li_list6 = tree.xpath("//ul/li[contains(@id,'l')]/text()")  # 查询包含l的li标签
li_list7 = tree.xpath("//ul/li[starts-with(@id,'l')]/text()")  # 查询id的值以l开头的li标签
li_list8 = tree.xpath("//ul/li[@id='l1' and @class='c1']/text()")    # 查询id为l1和class为c1的标签
li_list9 = tree.xpath("//ul/li[@id='l1']/text() | //ul/li[@id='l2']/text()")  # 查询id为l1或id为l2的标签
# li_list9 = tree.xpath("//ul/li[@id='l1' | @id='l2']/text()")   # 不能这样写
print(li_list9)

# 判断列表的长度
print(len(li_list))

html文件:




    
    Document


    
  • 北京
  • 上海
  • 深圳
  • 武汉
  • 大连
  • 锦州
  • 沈阳

例子:获取百度网站的 “百度一下” 四个字

注:xpath的返回值是一个列表类型的数据

# 1)获取网页的源码
# 2)解析服务器响应的文件
# 3)打印

import urllib.request
from lxml import etree

url = "https://www.baidu.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发起请求
response = urllib.request.urlopen(request)
# 获取响应数据
content = response.read().decode("utf-8")
# print(content)

# 解析网页源码,获取数据

# 解析服务器响应的文件
tree = etree.HTML(content)

# 获取想要的数据  xpath的返回值是一个列表类型的数据
result= tree.xpath("//input[@id='su']/@value")[0]
print(result)   # 百度一下

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