如何使用python和beautifulsoup获取title属性?
Posted
技术标签:
【中文标题】如何使用python和beautifulsoup获取title属性?【英文标题】:How to obtain title attribute using python and beautifulsoup? 【发布时间】:2017-08-17 18:18:06 【问题描述】:假设如下:
<td title="I want this title" role="gridcell"><a onclick="open" href="#">TEXT</a></td>
现在,我已经成功地分别找到了表格和各个行:
for rows in soup.find_all(['tr']):
for cells in rows.find_all(['td']):
通过打印cells
,我可以看到我找到了正确的行,但我真的不确定如何获取标题属性并将其保存为字符串?我尝试使用temp = soup.find('td')['title']
,但这样做时出错,所以显然我做错了什么。
任何建议将不胜感激!
【问题讨论】:
【参考方案1】:soup = BeautifulSoup(html_data, 'html5lib')
tag_object=soup.title
tag_object
【讨论】:
【参考方案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'
【讨论】:
嗨,比尔,非常感谢您为此添加了另一种方法。我也一定会试试这个;如果有的话,那么为了学习。非常感谢!【参考方案3】:要获取元素的属性,您可以将元素视为字典 (reference):
soup.find('tag_name')['attribute_name']
而且,在你的情况下:
for tr in soup.find_all('tr'):
for td in tr.find_all('td'):
print(td.get('title', 'No title attribute'))
请注意,我使用.get()
方法来避免在没有title
属性的td
元素上失败。
【讨论】:
以上是关于如何使用python和beautifulsoup获取title属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python和beautifulsoup获取title属性?
如何使用 BeautifulSoup 和 Python 调用 JavaScript 函数
如何仅使用BeautifulSoup和Python删除包含空格的HTML标记