Рептилия решить библиотеку Xpath

Краткое введение

XPath является XML Path Language (XML Path Language), который представляет собой XML - документ используется для определения положения части языка.
XPath на основе структуры XML дерева, обеспечивая возможность найти узел в дереве данных. XPath ум изначально предложил , чтобы его как общее назначение, между XPointer и XSL моделями грамматических между ними. Но вскоре XPath можно использовать для разработчиков в качестве небольшого языка запросов .

грамматика

Выбор XPath использует выражения пути для выбора узлов узлов в документе XML. Вдоль пути через узел, или для выбора шага.  [1] 
Ниже перечислены наиболее полезные выражения пути:
выражение
описание
имя_узла
Выберите все дочерние узлы данного узла.
/
Выберите из корневого узла.
//
Выберите документ соответствует выбранному узлу из текущего узла, независимо от их местоположения.
,
Выберите текущий узел.
..
Выберите родитель текущего узла.
@
Выберите Свойства.

 

операторы

операторы
описание
примеров
Возвращаемое значение
|
Расчет двух наборов узлов
// книга | //CD
Возвращает узел набора имеет все элементы книги и компакт-диска
+
прибавление
6 + 4
10
-
вычитание
6 - 4
2
*
умножение
6 * 4
24
ДИВ
разделение
8 DIV 4
2
знак равно
равных
цена = 9,80
Если цена 9,80, она возвращает истину.
Если цена 9,90, возвращается ложь.
знак равно
Не равно
цена! = 9,80
Если цена 9,90, она возвращает истину.
Если цена 9,80, возвращается ложь.
<
Менее
цена <9,80
Если цена 9.00, она возвращает истину.
Если цена 9,90, возвращается ложь.
<=
Меньше или равно
цена <= 9,80
Если цена 9.00, она возвращает истину.
Если цена 9,90, возвращается ложь.
>
Больше
цена> 9,80
Если цена 9,90, она возвращает истину.
Если цена 9,80, возвращается ложь.
> =
Больше или равно
цена> = 9,80
Если цена 9,90, она возвращает истину.
Если цена 9,70, возвращается ложь.
или же
или
цена = 9,80 или цена = 9,70
Если цена 9,80,
Или цена 9,70, она возвращает истину.
а также
и
цена> 9,00 и цена <9,90
Если цена больше, чем 9.00,
И цена меньше, чем 9,90, он возвращает истину.
модификация
Рассчитано остаток от деления
5 по модулю 2
1

 

Общие выражения

- 获取所有节点
    - 获取所有li标签
    - //*  //li
- 获取子节点
    - 我们通过/或//即可查找元素的子节点和子孙节点
    - li节点的所有直接a子节点
    - //li/a
    - 获取ul的所有子孙a节点
    - //ul//a
    
- 获取父节点属性
    - 知道子节点查询父节点
    - //div[@class="filter-wrap"]/../@class'
    - //div[@class="filter-wrap"]/parent::*/@class'
    
- 属性定位
    - 找到当前源码中所有class属性为song的div标签
    - //div[@class="song"]
    
- 层级&索引定位
    - 找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a
    - //div[@class="tang"]/ul/li[2]/a
    
- 多属性匹配
    - 从当前源码中找到href属性为空且class属性为song的所有a标签
    - //a[@href="" and @class="song"]
    
- 模糊匹配
    - 找到所有class属性值中包含nb的所有div标签
    - //div[contains(@class,"so")]
    - 找到所有class属性值以zb开头的所有div标签
    - //div[starts-with(@class,"ta")]
    
- 获取文本
    - / 表示获取某个标签下的文本内容
    - // 表示获取某个标签下的文本内容和所有子标签下的文本内容
    - //div[@class="song"]/p[1]/text()
    - //div[@class="tang"]//text()
    
- 获取属性
    - //div[@class="tang"]//li[2]/a/@href
    

案例演示

环境安装

pip install lxml

解析原理

- 解析原理:
    - 获取页面源码数据
    - 实例化一个etree对象,并将页面源码数据加载到该对象中
    - 调用该对象的xpath方法进行指定标签的定位
    - 注意:xpath函数必须结合着xpath表达式进行标签的定位和内容的捕获

58同城房源信息抓取

import requests
from lxml import etree

url = "https://bj.58.com/shahe/ershoufang/?PGTID=0d30000c-0047-e4b2-f57c-08960a90aab4&ClickID=1"
headres = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
response = requests.get(url).text

# 实列化一个etree对象,加载页面源码数据
tree = etree.HTML(response)

# etree对象调用xpath函数,结合xpath表达式进行标签定位和内容捕获
li_list = tree.xpath('//ul[@class="house-list-wrap"]/li') # 返回值由很多个li标签组成的列表
for i in li_list:
    tetle = i.xpath("./div[2]/h2/a/text()")[0]   # 局部调用表达式时必须加点
    procr = "".join(i.xpath("./div[3]/p//text()"))  # 将价格拼接
    print(tetle,procr)

 

 

рекомендация

отwww.cnblogs.com/songzhixue/p/11221919.html