BeautifulSoup从评论html中提取文本[重复]

2023-12-05

抱歉,如果这个问题与其他问题相似,我无法使任何其他解决方案发挥作用。我正在使用 beautifulsoup 抓取一个网站,并尝试从评论的表字段中获取信息:

<td>
    <span class="release" data-release="1518739200"></span>
    <!--<p class="statistics">

                      <span class="views" clicks="1564058">1.56M Clicks</span>

                        <span class="interaction" likes="0"></span>

    </p>-->
</td>

如何获得“观看次数”和“互动次数”部分?


您需要从评论中提取 HTML 并使用 BeautifulSoup 再次解析它,如下所示:

from bs4 import BeautifulSoup, Comment
html = """<td>
    <span class="release" data-release="1518739200"></span>
    <!--<p class="statistics">

                      <span class="views" clicks="1564058">1.56M Clicks</span>

                        <span class="interaction" likes="0"></span>

    </p>-->
</td>"""
soup = BeautifulSoup(html , 'lxml')
comment = soup.find(text=lambda text:isinstance(text, Comment))
commentsoup = BeautifulSoup(comment , 'lxml')
views = commentsoup.find('span', {'class': 'views'})
interaction= commentsoup.find('span', {'class': 'interaction'})
print (views.get_text(), interaction['likes'])

Outputs:

156 万次点击 0

如果评论不是页面上的第一个评论,您需要像这样索引它:

comment = soup.find_all(text=lambda text:isinstance(text, Comment))[1]

或者从父元素中找到它。

更新回应评论:

为此,您可以使用父“tr”元素。您提供的页面有“共享”而不是“交互”,所以我希望您得到一个 NoneType 对象,它给您带来了您看到的错误。如果需要,您可以在代码中添加 NoneType 对象的测试。

from bs4 import BeautifulSoup, Comment
import requests
url = "https://imvdb.com/calendar/2018?page=1"
html = requests.get(url).text
soup = BeautifulSoup(html , 'lxml')

for tr in soup.find_all('tr'):
    comment = tr.find(text=lambda text:isinstance(text, Comment))
    commentsoup = BeautifulSoup(comment , 'lxml')
    views = commentsoup.find('span', {'class': 'views'})
    shares= commentsoup.find('span', {'class': 'shares'})
    print (views.get_text(), shares['data-shares'])

Outputs:

3.60K Views 0
1.56M Views 0
220.28K Views 0
6.09M Views 0
133.04K Views 0
163.62M Views 0
30.44K Views 0
2.95M Views 0
2.10M Views 0
83.21K Views 0
5.27K Views 0
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeautifulSoup从评论html中提取文本[重复] 的相关文章

随机推荐