如何使用python和beauthoulsoup获取title属性?

2024-05-08 02:56:11 发布

您现在位置:Python中文网/ 问答频道 /正文

假设如下:

<td title="I want this title" role="gridcell"><a onclick="open" href="#">TEXT</a></td>

现在,我使用以下方法成功地找到了表和单独的行:

^{pr2}$

通过打印cells我可以看到我找到了正确的行,但是我真的不知道如何获取title属性并将其保存为字符串?我试图使用temp = soup.find('td')['title'],但是我在做这个时遇到了错误,所以很明显我做错了什么。在

如有任何建议,将不胜感激!在


Tags: 方法字符串text属性titleopenthisrole
2条回答

lxml库通常也很有用,因为它可以使用xpath表达式识别HTML结构,这样可以生成更紧凑的代码。在

在本例中,xpath表达式//td[@title]请求所有td元素,但坚持title属性存在。在for循环中,您可以看到不需要检查属性是否存在,因为这已经完成了。在

>>> from io import StringIO
>>> HTML = StringIO('''\
... <td title="title 1" role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td title="title 2" role="gridcell"><a onclick="open" href="#">TEXT</a></td>
... <td title="title 3" role="gridcell"><a onclick="open" href="#">TEXT</a></td>''')
>>> parser = etree.HTMLParser()
>>> tree = etree.parse(HTML, parser)
>>> tds = tree.findall('//td[@title]')
>>> tds
[<Element td at 0x7a0888>, <Element td at 0x7a0d08>, <Element td at 0x7ae588>]
>>> for item in tree.findall('//td[@title]'):
...     item.attrib['title']
...     
'title 1'
'title 2'
'title 3'

要获取元素的属性,可以将元素视为字典(dictionary(reference):

soup.find('tag_name')['attribute_name']

在你的情况下:

^{pr2}$

注意,我使用了.get()方法来避免在没有title属性的td元素上失败。在

相关问题 更多 >