【问题标题】:cannot extract text from tag Beautifulsoup无法从标签 Beautifulsoup 中提取文本
【发布时间】:2017-10-12 08:01:54
【问题描述】:

以下命令正确地从 HTML 页面中提取表格:

[tr.findAll('td') for tr in table.findAll('tr',{'class': "js-file-line"})]


[[<td class="blob-num js-line-number" data-line-number="1" id="L1"></td>],
[<td class="blob-num js-line-number" data-line-number="2" id="L2"></td>,
<td>Arsenal</td>,
<td>38</td>,
<td>26</td>,
<td>9</td>,
<td>3</td>,
<td>79</td>,
<td>36</td>,
<td>87</td>],
[<td class="blob-num js-line-number" data-line-number="3" id="L3"></td>,
<td>Liverpool</td>,
etc.

我想修改命令以提取每个 td 的内容。 但我无法从每一行中提取文本,因为 .text 返回错误: 我使用以下命令:

[tr.findAll('td').text[1:] for tr in table.findAll('tr',{'class': "js-file-line"})][1:]

其中 [1:] 用于跳过标题(它们工作正常。经过测试)。问题是 .text 导致以下错误:

ResultSet object has no attribute 'text'. 
You're probably treating a list of items like a single item. 
Did you call find_all() when you meant to call find()?

我实际上使用的是 findAll,据我了解,它等同于 find_All。

对不起,如果这个问题太基本了......

【问题讨论】:

    标签: beautifulsoup text-extraction


    【解决方案1】:

    find_All 方法返回一个ResultSet 对象,它基本上是一个Tag 对象的列表。
    text 是一个Tag 属性,因此您应该多使用一个列表推导式。

    txt = [
        [td.text for td in tr.find_all('td')][1:] 
        for tr in table.find_all('tr', {'class': "js-file-line"})
        ][1:]
    

    或者,如果行只包含“td”标签,您可以使用strings 生成器。

    txt = [list(tr.strings)[1:] for tr in table.find_all('tr', {'class': "js-file-line"})][1:]
    

    【讨论】:

    • 我需要考虑一下,因为这对我来说有点神秘,但效果很好!谢谢。
    • 欢迎提问
    猜你喜欢
    • 2023-04-02
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多