Je suis en train de gratter tous les liens vers des vidéos et des transcriptions en anglais de this site en utilisant scrapy et pythonpython scrapy - grattage de popup de onclick dialogue
Je suis l'araignée pour gratter tous les URL vidéo de toutes les pages (NB Je suis inutile à la programmation), mais je ne peux pas comprendre comment gratter les transcriptions. La boîte de dialogue de transcription n'apparaît qu'après avoir cliqué sur un bouton. Les liens vers les transcriptions se trouvent sur cette nouvelle fenêtre. Tous les autres didacticiels que j'ai lus concernent les requêtes POST, mais il semble que ce soit une requête ajax GET. (Donc, je suis complètement désemparé quoi faire). J'ai aussi vu les messages qui mentionnent des charges utiles et le contrôle de forme, mais je ne sais pas ce qu'ils sont pour ce site
HTML pertinent de la page précédente cliquage:
<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 pertinent après un clic (de la boîte de dialogue contextuelle):
<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>
mon code d'araignée actuelle (ne fonctionne pas)
import scrapy
class SuhbaSpider(scrapy.Spider):
name = "suhbas"
start_urls = ["http://saltanat.org/videos.php?topic=SheikhBahauddin&gopage={numb}".format(numb=numb)
\t \t for numb in range(1,23)]
def parse(self, response):
\t \t \t yield {
'video': response.xpath('//span[@class='download make-cursor']/a/@href').extract(),
}
\t \t 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(),
}
Toute aide serait appréciée, merci!
2 façons de le faire. Vous pouvez exécuter javascript avec un webdriver et simuler un clic sur le bouton. Ou vous pourriez faire la demande GET vous-même puis analyser la réponse. Ouvrez les outils de développement de votre navigateur dans l'onglet Réseau et vérifiez ce qu'il fait lorsque vous cliquez sur le bouton. Essayez de faire la même requête dans votre code python. – rm4
@ rm4 Merci pour la réponse, je ne suis pas trop désireux d'utiliser un truc webdriver, j'ai joint mon code pour mon araignée ci-dessus où j'ai essayé de le faire en fonction de votre deuxième option. Le problème est que je ne reçois aucun résultat quand je lance l'araignée – jblack