2017-10-16 14 views
1

내가 모든 페이지에서 모든 동영상 URL의를 긁어 거미를 가지고 scrapy 및 파이썬파이썬 scrapy -에서 긁어은 온 클릭 대화

를 사용하여 this site에서 동영상 및 영어 성적 증명서에 대한 모든 링크를 긁어하기 위해 노력하고있어 (NB 팝업 . 프로그래밍에서는 쓸모가 없다.)하지만, 필사본을 긁는 방법을 알아낼 수 없다. 스크립트 대화 상자는 버튼을 클릭 한 후에 만 ​​나타납니다. 성적표에 대한 링크는이 새 팝업에서 찾을 수 있습니다. 내가 읽은 다른 모든 자습서는 POST 요청을 처리하지만 이것이 아약스 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) 
 
\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(), 
 
      }

어떤 도움을 (작동하지 않는 것은) 주시면 감사하겠습니다, 감사합니다!

+1

두 가지 방법이 있습니다. 당신은 webdriver로 자바 스크립트를 실행하고 버튼 클릭을 시뮬레이션 할 수 있습니다. 또는 GET 요청을 직접 수행 한 다음 응답을 구문 분석 할 수 있습니다. 네트워크 탭에서 브라우저의 dev 도구를 열고 단추를 클릭 할 때 수행중인 작업을 확인하십시오. 파이썬 코드에서 동일한 요청을 시도하십시오. – rm4

+0

@ rm4 답장을 보내 주셔서 감사합니다. 웹 드라이브 사용에 너무 열중하지 않습니다. 두 번째 옵션을 기반으로 해보려 던 스파이더 코드를 첨부했습니다. 문제는 스파이더를 실행할 때 어떤 결과도 얻지 못한다는 것입니다. – jblack

답변

0

코드를 사용하여 놀고 난 후 문제가 "하위 문자열"명령이었습니다. "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() 
 
    
 
\t for videoid in fullvideoid: 
 
\t \t url = ("http://saltanat.org/ajax_transcription.php?vid=" + videoid[21:-2])