xpath如何获取标签内部属性值
时间: 2024-02-04 08:42:13 浏览: 152
XPath可以使用`@`符号来获取标签内部属性的值。例如,如果我们有以下HTML代码:
```html
<div class="example" id="myDiv">This is an example div</div>
```
我们可以使用以下XPath表达式来获取`class`和`id`属性的值:
```xpath
//div/@class
//div/@id
```
执行这些表达式将分别返回字符串值`example`和`myDiv`。
相关问题
xpath模糊contains
### 使用 `contains` 函数在 XPath 中实现模糊匹配
#### 一、基本语法
为了实现在属性中的模糊匹配,可以利用 `contains()` 函数。此函数接收两个参数:第一个是要检查其内容的字符串路径;第二个则是作为子串被寻找的目标字符串[^1]。
对于元素节点下的文本内容执行模糊匹配操作同样适用上述方法。当目标是从文档结构里挑选含有特定部分文字的节点时,`contains()` 同样能发挥作用[^2]。
#### 二、具体应用案例
##### 属性值内的模糊匹配
下面的例子展示了如何基于输入框 (`<input>`) 的类名(`@class`) 进行不完全一致性的查找:
```python
from selenium import webdriver
driver = webdriver.Chrome()
element = driver.find_element_by_xpath("//input[contains(@class,'s_ip')]")
element.send_keys("hao")
```
这段代码会找到页面上所有 `<input>` 类型标签中那些类别名称包含 `'s_ip'` 片段的对象,并向其中发送字符 `"hao"`。
##### 文本节点里的模糊匹配
如果目的是定位到具有某些特征描述但又不是精确相等的文字,则可以通过如下方式完成:
假设网页中有多个列表项(`<li>`) ,而希望获取内含 "Python" 字样的那一项链接(`<a>`):
```python
link_with_python_text = driver.find_element_by_xpath("//ul/li/a[contains(text(), 'Python')]")
print(link_with_python_text.get_attribute('href'))
```
这里运用了 `text()` 方法来访问锚点内部的实际显示文本并对其进行模式匹配。
##### 利用通配符进行更广泛的搜索
有时可能只知道一部分 ID 或其他唯一标识符的名字片段,在这种情况下可借助星号(`*`)代表任意数量未知字符的方式扩大检索范围:
```python
search_box = driver.find_element_by_xpath("//*[@id='kw']")
search_box.clear() # 清除已有内容以便重新输入新的关键词
search_box.send_keys("Selenium教程")
```
此处采用双引号括起来的整体表达式意味着无论前缀是什么只要结尾处有 `'kw'` 就符合条件[^3]。
python爬虫xpath提取文本
Python爬虫xpath提取文本的方法如下:
1. 导入相关模块
```python
import requests
from lxml import etree
```
2. 发送请求获取页面源码
```python
url = 'http://www.example.com'
response = requests.get(url)
html = response.text
```
3. 解析页面源码
```python
tree = etree.HTML(html)
```
4. 使用xpath提取文本
```python
# 提取所有a标签的文本
a_text_list = tree.xpath('//a/text()')
# 提取第一个a标签的文本
a_text = tree.xpath('//a[1]/text()')[0]
# 提取class属性值为"example"的div标签的文本
div_text = tree.xpath('//div[@class="example"]/text()')[0]
```
注意:xpath返回的是一个列表,如果只需要一个结果,可以使用索引 `[0]` 或者 `extract_first()` 方法来提取。如果需要提取的文本在标签内部,可以使用 `//tagname/text()` 的方式来提取。
阅读全文