2017-08-19 1 views
0

Cela fait deux jours que je me bats avec cela. J'ai besoin de gratter les données du site Web this pour tous les "Cadres" ou catégories. Malheureusement, le site permet l'accès à ces données via un menu déroulant "Select Cadre" qui ne dispose pas d'une option "Toutes les catégories". Pour contourner cela, j'utilise la méthode FormRequest.from_response de Scrapy mais l'araignée retourne un fichier vide sans données. Toute aide est appréciée. Voici le code:L'utilisation de la méthode FormRequest.from_response de Scrapy automatise le raclage des données du menu déroulant.

import scrapy 

class IASWinnerSpider(scrapy.Spider): 

    name = 'iaswinner_list' 
    allowed_domains = ['http://civillist.ias.nic.in'] 

    def start_requests(self): 
     urls = [ 'http://civillist.ias.nic.in/UpdateCL/DraftCL.asp' ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     return scrapy.FormRequest.from_response(response, method='POST', 
        formdata={'cboCadre': 'UT'}, dont_click=True, callback=self.after_post) 

    def after_post(self, response): 

     table  = response.xpath('/html/body/div/table//tr') 

     for t in table: 

      yield { 
       'serial': t.xpath('td[1]/text()').extract(), 
       'name': t.xpath('td[2]/text()').extract(), 
       'qual': t.xpath('td[3]/text()').extract(), 
       'dob': t.xpath('td[4]/text()').extract(), 
       'post': t.xpath('td[5]/text()').extract(), 
       'rem': t.xpath('td[6]/text()').extract(), 
      } 
+0

Le code donné n'est pas encore "complet" (voir [mcve]). Il pourrait être conseillé d'ajouter une section '__main__' présentant le problème. – ederag

+0

Si la réponse de Linhart répond à vos besoins, n'oubliez pas de marquer «accepté». –

+0

Oui, c'est fait. Merci. –

Répondre

1

Quand je lance votre code, je vois cela dans le journal:

2017-08-19 15:52:20 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'civillist.ias.nic.in': <POST http://civillist.ias.nic.in/UpdateCL/DraftCL.asp> 

il suffit de changer allowed_domains à ceci:

allowed_domains = ['civillist.ias.nic.in'] 

et cela fonctionne.