python小小白哟 发表于 2025-4-14 16:55:23

使用python中的pyquery用attr方法获取到的是None

使用python中的pyquery用attr方法获取到的是None,示例如下:


from pyquery import PyQuery


html = '''
<div class="wrap">
    <div id="container">
      <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
   </div>
</div>
'''


doc = PyQuery(html)
a = doc('.list .item-0.active')
print(a)
print(a.attr('href'))

FishC 发表于 2025-4-14 16:56:50


问题分析:
观察代码和HTML结构,发现两个核心问题:

1. 选择器 .item-0.active 需要同时匹配 item-0 和 active 类,但示例HTML中所有 <li> 都没有 active 类
2. 尝试获取的 href 属性不存在于 <li> 元素上,这是 <a> 标签的属性


解决方案:

[*]修改选择器匹配实际存在的元素:
python
# 匹配最后一个<li>(PyQuery索引从0开始)
a = doc('.list li:eq(0)')
# 或者匹配所有.item-0类
a = doc('.item-0')


[*]如果要获取href属性,HTML需要包含<a>标签:
html
<li class="item-0 active">
    <a href="https://fishc.com.cn">带链接的条目</a>
</li>


[*]正确获取子元素的属性:
python
# 先选择<li>,再找子元素<a>
link = doc('.item-0 a').attr('href')
print(link)# 输出:https://fishc.com.cn



验证示例:
python
from pyquery import PyQuery

html = '''
<div class="container">
    <ul class="list">
      <li class="item-0 active">
            <a href="https://fishc.com.cn">带链接的条目</a>
      </li>
      <li class="item-1">普通条目</li>
    </ul>
</div>
'''

doc = PyQuery(html)
# 正确获取href属性
link = doc('.item-0 a').attr('href')
print(link)# 输出:https://fishc.com.cn


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-14 18:26:16

当然是none啊,有item-0和active这两个class的是a 外面的li,你要获取a的href就要改成
.list .item-0.active a
页: [1]
查看完整版本: 使用python中的pyquery用attr方法获取到的是None