我正在编写一个网络抓取工具。我提取了此link的标题和主要讨论,但我无法找到任何一个评论(Ctrl + u - > Ctrl + f。评论文字)。我认为评论是用JavaScript编写的。我可以提取它吗?
答案 0 :(得分:2)
是的,如果可以使用网络浏览器查看,则可以将其解压缩。
如果查看源代码,它实际上是一个加载了一段javascript的iframe,然后在文档中创建一个新标签,该脚本标记的源代码加载了bundle.js,它实际上包含了评论软件。然后轮流获取实际的评论。
您可以考虑使用webkit来创建一个像普通浏览器一样执行javascript的无头浏览器,而不是手动完成此操作。然后你可以从中获取,而不必手动让你的爬虫获取外部资源。
此类无头浏览器的示例可能是Spynner,Dryscape或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)