如果您查看您的网络检查,您可以看到在页面加载后正在发出 AJAX 请求以检索脚本:
![在此处输入图像描述](https://i.stack.imgur.com/mX2Y0.png)
在这种情况下,它是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!