我正在尝试从 this site 中抓取所有视频和英文文字记录的链接。使用scrapy和python
我让蜘蛛从所有页面上抓取所有视频 URL(注意,我在编程方面没用),但我不知道如何抓取文字记录。仅在单击按钮后才会弹出转录对话框。文字记录的链接可以在这个新的弹出窗口中找到。我读过的所有其他教程都涉及 POST 请求,但看起来这是一个 ajax GET 请求。 (所以我完全不知道该怎么做)。我也看到过提到有效负载和表单控制的帖子,但我不知道它们对于这个网站来说是什么
点击按钮之前页面的相关 HTML:
<span class="transcription make-cursor" onclick="showTranscriptionDialog('17394')">
<img class="video-doclet-icons" src="images/transcript4.png"
title="Download Transcription, Tercüme'yi indir, تحميل النص"
alt="Transcription" data-pin-nopin="true"></span>
点击(弹出对话框)后的相关 HTML:
<span class="ui-corner-all" id="transcription-language-list17394"
style="background-color: rgb(245, 243, 229); color: rgb(51, 51, 51);">
<a class="transcription-language-list" target="_blank"
href="http://saltanat-transcriptions.s3.amazonaws.com/english/2017-08-08_en_NothingMeansEverything_SB.pdf"
onmouseover="transcriptionLanguageMouseOver(17394)"
onmouseout="transcriptionLanguageMouseOut(17394)"
style="color: rgb(51, 51, 51);"> English </a></span>
我当前的蜘蛛代码(不起作用)
import scrapy
class SuhbaSpider(scrapy.Spider):
name = "suhbas"
start_urls = ["http://saltanat.org/videos.php?topic=SheikhBahauddin&gopage={numb}".format(numb=numb)
for numb in range(1,23)]
def parse(self, response):
yield {
'video': response.xpath('//span[@class='download make-cursor']/a/@href').extract(),
}
videoid = response.xpath("substring(//span[@class='media-info make-cursor']/@onclick, 22, 5)").extract()
for p in videoid:
url = "http://saltanat.org/ajax_transcription.php?vid=" + p
yield scrapy.Request(url, callback=self.parse_transcript)
def parse_transcript(self, response):
yield {
'transcript': response.xpath('//a[contains(@href,'english')]/@href').extract(),
}
如有任何帮助,我们将不胜感激,谢谢!
最佳答案
好吧,在研究了代码之后,我得到了一个可行的解决方案,问题是“substring”命令。它不应该放在“response.xpath”行中。我使用了替代语法来执行相同的操作,如下所示(即获取子字符串)
不工作的部分
videoid = response.xpath("substring(//span[@class='media-info make-cursor']/@onclick, 22, 5)").extract()
for p in videoid:
url = "http://saltanat.org/ajax_transcription.php?vid=" + p
替换为该工作部件
fullvideoid = response.xpath("//span[@class='media-info make-cursor']/@onclick").extract()
for videoid in fullvideoid:
url = ("http://saltanat.org/ajax_transcription.php?vid=" + videoid[21:-2])
关于javascript - python scrapy - 从 onclick 弹出对话框中抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767498/