【问题标题】:scrape <span> tag text using BeautifulSoup has no text attribute使用 BeautifulSoup 抓取 <span> 标记文本没有文本属性
【发布时间】:2016-05-22 11:31:25
【问题描述】:

我已经抓取了一个论坛页面,我已将所有帖子保存在一个名为 post_list 的列表中。但似乎我无法再进一步找到帖子作者:

这是我在不尝试查找文本的情况下运行命令时得到的:

for post in post_list:
    print post.findAll("span" , {"itemprop" : "name"})

这给了我:

[<span class="hide" itemprop="name">00Amin</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">Zapad</span>]
[<span class="hide" itemprop="name">iMosi</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">alen</span>]
[<span class="hide" itemprop="name">mahdavi3d</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">alen</span>]
[<span class="hide" itemprop="name">rezatizi</span>]
[<span class="hide" itemprop="name">Trooper</span>]
[<span class="hide" itemprop="name">rasoolmr</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">iMosi</span>]
[<span class="hide" itemprop="name">anybody</span>]

但是,如果我使用 .text 尝试相同的代码:

for post in post_list:
    print post.findAll("span" , {"itemprop" : "name"}).text

我明白了:

AttributeError: 'ResultSet' object has no attribute 'text'

如果我作弊并将 for 循环结果保存在变量(或列表)中,然后尝试从那里获取文本,我又失败了!

posts = []
for post in post_list:
     posts.append(post.findAll("span",  {"itemprop" : "name"}))

我没有收到任何错误,但我无法再次找到任何 .text 属性

我已经搜索并测试了我找到的其他一些问题,但它们不起作用。

【问题讨论】:

  • 因为不是.text而是.string,根据文档?
  • 不,它也没有 .string 属性...
  • @spectras textstring 在 BS 元素中都可用。问题是,findAll()ResultSet的形式返回多个元素,它既没有text也没有string

标签: python web-scraping beautifulsoup


【解决方案1】:

正如错误消息清楚地表明的那样,这是因为findAll() 返回的ResultSet 没有属性text。您需要遍历结果,或使用列表理解:

for post in post_list:
    print [span.text for span in post.findAll("span" , {"itemprop" : "name"})]

如果每个post 中始终只有一个span 元素(从您的第一个代码sn-p 的输出判断),那么您应该可以使用find() 而不是findAll()

for post in post_list:
    print post.find("span" , {"itemprop" : "name"}).text

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多