我可以使用python3从https://www.rt.com/中提取任何页面的评论吗?

时间:2016-07-27 08:18:01

标签: javascript python beautifulsoup web-crawler

我正在编写一个网络抓取工具。我提取了此link的标题和主要讨论,但我无法找到任何一个评论(Ctrl + u - > Ctrl + f。评论文字)。我认为评论是用JavaScript编写的。我可以提取它吗?

2 个答案:

答案 0 :(得分:2)

是的,如果可以使用网络浏览器查看,则可以将其解压缩。

如果查看源代码,它实际上是一个加载了一段javascript的iframe,然后在文档中创建一个新标签,该脚本标记的源代码加载了bundle.js,它实际上包含了评论软件。然后轮流获取实际的评论。

您可以考虑使用webkit来创建一个像普通浏览器一样执行javascript的无头浏览器,而不是手动完成此操作。然后你可以从中获取,而不必手动让你的爬虫获取外部资源。

此类无头浏览器的示例可能是SpynnerDryscape或PhantomJS派生的PhantomPy(后者似乎现在是一个废弃的项目)。

答案 1 :(得分:2)

RT正在使用spot.im中的服务进行评论

你需要做两个POST请求,首先https://api.spot.im/me/network-token/spotim获取一个令牌,然后https://api.spot.im/conversation-read/spot/sp_6phY2k0C/post/353493/get获取JSON的注释。

我写了一个快速的脚本来做这个

import requests
import re
import json

def get_rt_comments(article_url):
    spotim_spotId = 'sp_6phY2k0C' # spotim id for RT
    post_id = re.search('([0-9]+)', article_url).group(0)

    r1 = requests.post('https://api.spot.im/me/network-token/spotim').json()
    spotim_token = r1['token']

    payload = {
        "count": 25, #number of comments to fetch
        "sort_by":"best",
        "cursor":{"offset":0,"comments_read":0},
        "host_url": article_url,
        "canonical_url": article_url
    }

    r2_url ='https://api.spot.im/conversation-read/spot/' + spotim_spotId + '/post/'+ post_id +'/get'
    r2 = requests.post(r2_url, data=json.dumps(payload), headers={'X-Spotim-Token': spotim_token , "Content-Type": "application/json"})

    return r2.json()

if __name__ == '__main__':
    url = 'https://www.rt.com/usa/353493-clinton-speech-affairs-silence/'
    comments = get_rt_comments(url)
    print(comments)