2016-08-14 72 views
1

我想从一些Khan Academy视频中使用scrapy获取转录信息。 例如:https://www.khanacademy.org/math/algebra-basics/basic-alg-foundations/alg-basics-negative-numbers/v/opposite-of-a-numberScrapy xpath aria-select = false

,当我试图通过选择的XPath response.xpath('//div[contains(@role, "tablist")]/a').extract()的成绩单按钮,我只得到了有关选项卡中的信息有aria-selected="true"这是关于部分。我需要使用scrapy在抄本按钮中将aria-selected从false更改为true,然后检索必要的信息。

任何人都可以请澄清我将如何能够做到这一点?

非常感谢!

+0

你的意思是成绩单的文字? –

+0

是的! – abarbosa

回答

1

如果你看看你的网络检查,你可以看到一个AJAX请求正在取得检索谈话一次页面加载:

enter image description here

在这种情况下,它https://www.khanacademy.org/api/internal/videos/2Zk6u7Uk5ow/transcript?casing=camel&locale=en&lang=en 这似乎使用YouTube视频网址ID创建此api网址。所以你可以很容易地重新创建它:

import json 
import scrapy 
class MySpider(scrapy.Spider): 
    #... 
    transcript_url_template = 'https://www.khanacademy.org/api/internal/videos/{}/transcript?locale=en&lang=en' 

    def parse(self, response): 
     # find youtube id 
     youtube_id = response.xpath("//meta[@property='og:video']/@content").re_first('v/(.+)') 
     # create transcript API url using the youtube id 
     url = self.transcript_url_template.format(youtube_id) 
     # download the data and parse it 
     yield Request(url, self.parse_transript) 

    def parse_transcript(self, response): 
     # convert json data to python dictionary 
     data = json.loads(response.body) 
     # parse your data! 
+0

的成绩单文本我想知道URL的“套件=骆驼”部分是什么 - 它提供了完全相同的数据,无论它有没有... –

+0

@JannieGerber是的,似乎是这样。可能是不推荐使用的参数,或者只能影响在此特定示例中不存在的某些字段。无论如何,这个例子似乎没有必要 – Granitosaurus