1

我正在尝试使用 scrapy 从一些可汗学院视频中获取转录信息。例如:https ://www.khanacademy.org/math/algebra-basics/basic-alg-foundations/alg-basics-negative-numbers/v/opposite-of-a-number

当我尝试通过 xpath 选择 Transcript 按钮时,response.xpath('//div[contains(@role, "tablist")]/a').extract()我只获得了有关选项卡的信息aria-selected="true",即 About 部分。我需要使用 scrapy 将aria-selectedTranscript 按钮中的从 false 更改为 true,然后检索必要的信息。

谁能澄清我将如何做到这一点?

非常感激 !

4

1 回答 1

1

如果您查看您的网络检查,您可以看到在页面加载后正在发出 AJAX 请求以检索脚本:

在此处输入图像描述

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

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!
于 2016-08-15T03:00:07.537 回答