【问题标题】:python scrapy - scraping from onclick popup dialogpython scrapy - 从onclick弹出对话框中抓取
【发布时间】:2017-10-21 00:18:46
【问题描述】:

我正在尝试使用 scrapy 和 python 从this site 抓取所有指向视频和英文成绩单的链接

我让蜘蛛从所有页面中抓取所有视频 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(),
            }

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 两种方法。您可以使用 webdriver 执行 javascript 并模拟单击按钮。或者您可以自己执行 GET 请求,然后解析响应。在网络选项卡中打开浏览器的开发工具,然后单击按钮检查它在做什么。尝试在您的 python 代码中执行相同的请求。
  • @rm4 感谢您的回复,我不太热衷于使用网络驱动程序,我已将我的蜘蛛代码附在上面,我尝试根据您的第二个选项来执行此操作。问题是我运行蜘蛛时没有得到任何结果

标签: javascript jquery python scrapy


【解决方案1】:

好的,在玩弄了代码之后,我得到了一个可行的解决方案,问题是“子字符串”命令。它不应该放在“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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多