por*_*efs 8 python beautifulsoup html-parsing
我有一些html,我想从中提取文本.这是html的一个例子:
<p>TEXT I WANT <i> – </i></p>
Run Code Online (Sandbox Code Playgroud)
现在,<p>本文档中有很多标签.因此,find('p')获取我想要提取的文本不是一个好方法.但是,该<i>标记是文档中唯一的标记.所以,我以为我可以找到<i>,然后去找父母.
我试过了:
up = soup.select('p i').parent
Run Code Online (Sandbox Code Playgroud)
和
up = soup.select('i')
print(up.parent)
Run Code Online (Sandbox Code Playgroud)
我已经有尝试过.parents,我试过find_all('i'),find('i')...但我总是得到:
'list' object has no attribute "parent"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
find_all()返回一个列表.find('i')返回第一个匹配元素,或None.
因此,使用:
try:
up = soup.find('i').parent
except AttributeError:
# no <i> element
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<p>TEXT I WANT <i> – </i></p>')
>>> soup.find('i').parent
<p>TEXT I WANT <i> – </i></p>
>>> soup.find('i').parent.text
u'TEXT I WANT \u2013 '
Run Code Online (Sandbox Code Playgroud)
这有效:
i_tag = soup.find('i')
my_text = str(i_tag.previousSibling).strip()
Run Code Online (Sandbox Code Playgroud)
输出:
'TEXT I WANT'
Run Code Online (Sandbox Code Playgroud)
如其他答案中所述,find_all()返回一个列表,而find()返回第一个匹配或None
如果您不确定是否存在i标签,则只需使用一个try/except块即可
小智 6
soup.select()返回一个 Python 列表。所以你“取消列出”变量,例如:
>>> [up] = soup.select('i')
>>> print(up.parent)
Run Code Online (Sandbox Code Playgroud)
或者
>>> up = soup.select('i')
>>> print(up[0].parent)
Run Code Online (Sandbox Code Playgroud)
双方select()并find_all()返回您元素的数组。你应该这样做:
for el in soup.select('i'):
print el.parent.text
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27562 次 |
| 最近记录: |