首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美丽的汤- nextSibling

美丽的汤- nextSibling
EN

Stack Overflow用户
提问于 2011-05-14 12:09:35
回答 4查看 112K关注 0票数 53

我尝试使用以下内容获取"My home address“内容,但获得了AttributeError:

代码语言:javascript
复制
address = soup.find(text="Address:")
print address.nextSibling

这是我的HTML:

代码语言:javascript
复制
<td><b>Address:</b></td>
<td>My home address</td>

向下导航td标签并拉出内容的好方法是什么?

EN

回答 4

Stack Overflow用户

发布于 2011-05-14 12:23:15

问题是您找到的是NavigableString,而不是<td>。此外,nextSibling会找到下一个NavigableStringTag,所以即使你有<td>,它也不会以你期望的方式工作。

这就是你想要的:

代码语言:javascript
复制
address = soup.find(text="Address:")
b_tag = address.parent
td_tag = b_tag.parent
next_td_tag = td_tag.findNext('td')
print next_td_tag.contents[0]

或者更简洁:

代码语言:javascript
复制
print soup.find(text="Address:").parent.parent.findNext('td').contents[0]

实际上你可以这样做

代码语言:javascript
复制
print soup.find(text="Address:").findNext('td').contents[0]

因为findNext只是一次又一次地调用nextnext会反复查找下一个要解析的元素,直到匹配为止。

票数 98
EN

Stack Overflow用户

发布于 2018-02-12 02:02:07

如果您使用bs4,请尝试执行以下操作:

代码语言:javascript
复制
print soup.find(string="Address:").find_next('td').contents[0]
票数 19
EN

Stack Overflow用户

发布于 2021-02-11 01:00:49

我不知道这在2011年是否可能,但在2021年,我建议你使用find_next_sibling()这样做:

代码语言:javascript
复制
address = soup.find(text="Address:")
b = address.parent
address_td = b.parent
target_td = address_td.find_next_sibling('td')

可接受的答案适用于您的情况,但如果您具有以下条件,则不会起作用:

代码语言:javascript
复制
<div>
  <div><b>Address:</b><div>THE PROBLEM</div></div>
  <div>target</div>
</div>

你最终会用<div>THE PROBLEM</div>而不是<div>target</div>

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5999747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档