【问题标题】:How to obtain title attribute using python and beautifulsoup?如何使用python和beautifulsoup获取title属性?
【发布时间】: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'],但这样做时出错,所以显然我做错了什么。

任何建议将不胜感激!

【问题讨论】:

    标签: python html selenium beautifulsoup


    【解决方案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 元素上失败。

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        • 1970-01-01
        • 2016-08-14
        • 2021-05-21
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多