刮取网页的评论部分

时间:2016-01-03 23:00:08

标签: python beautifulsoup

我试图从网页上抓取评论计数器。代码如下所示。

当我要求它打印def get_all_active_printers(): return printers.find( {}, {'data': {'$slice': -1}, 'data.is_active': True, '_id': 0, 'vid': 0}) 时,输出是一个空列表。为什么会这样?

letters

2 个答案:

答案 0 :(得分:3)

列表为空,因为 在该页面上没有评论。 div#livefyre-comment为空,div.fyre-comment-count不存在。

在页面标题中,有一个可疑的script标记从http://cdn.livefyre.com/Livefyre.js中提取JavaScript。我不知道Livefyre是什么,但我认为它从某个地方的数据库中删除了评论,并将它们插入div#livefyre-comment或其周围的div.article-comments。据推测,一旦脚本完成,div.fyre-comment-count也会出现在DOM的某个地方。

这种......设计决策在网站上越来越常见。要查看真正的网页是什么样的,请关闭JavaScript和Cookie浏览它(并为那些从未想象过这种流氓行为的网站偶尔出现的“500内部服务器错误”做好准备)。 / p>

我不太了解屏幕抓取来告诉你从哪里开始。您可以将URL拼凑在一起直接从Livefyre获取注释(及其计数)。我首先要仔细阅读它们提供的JavaScript函数,以及data-settings的{​​{1}}属性,它似乎是一个充满相关参数的JSON字典。

答案 1 :(得分:-2)

您的代码非常接近,几乎是正确的。你错过了一些东西。请检查以下代码。

import urlparse
from bs4 import BeautifulSoup
import urllib2
r2 = urllib2.urlopen("http://www.ign.com/articles/2016/01/03/steam-surpasses-12-million-concurrent-users").read()
soup = BeautifulSoup(r2, 'html.parser')
for line in soup.find_all("div",class_="fyre-comment-count"):
    comments = ''.join(line.find_all(text=True))
    print (comments)