2017-05-16 1 views
0

Ich habe versucht, einige Listen von dieser Website http://www.golf.org.au zu scannen ist ein ASP.NET-basierte habe ich einige Nachforschungen gemacht und es scheint, dass ich einige Werte in einer POST-Anfrage übergeben muss Lassen Sie die Website die Daten in die Tabellen holen, die ich gemacht habe, aber ich versage immer noch mit der Idee, was mir fehlt?scraping Inhalt von ASP.NET-basierten Website mit scrapy

Hier ist mein Code:

# -*- coding: utf-8 -*- 
import scrapy 


class GolfscraperSpider(scrapy.Spider): 
    name = "golfscraper" 
    allowed_domains = ["golf.org.au","www.golf.org.au"] 
    ids = ['3012801330', '3012801331', '3012801332', '3012801333'] 
    start_urls = [] 
    for id in ids: 
     start_urls.append('http://www.golf.org.au/handicap/%s' %id) 

    def parse(self, response): 
     scrapy.FormRequest('http://www.golf.org.au/default.aspx? 
s=handicap', 
          formdata={ 
           '__VIEWSTATE': 
response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
           'ctl11$ddlHistoryInMonths':'48', 
           '__EVENTTARGET': 
'ctl11$ddlHistoryInMonths', 
           '__EVENTVALIDATION' : 
response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
           'gaHandicap' : '6.5', 
           'golflink_No' : '2012003003', 
           '__VIEWSTATEGENERATOR' : 'CA0B0334', 
          }, 
          callback=self.parse_details) 

    def parse_details(self,response): 
     for name in response.css('div.rnd-course::text').extract(): 
      yield {'name' : name} 

Antwort

1

Ja, ASP-Seiten sind schwierig zu kratzen. Höchstwahrscheinlich fehlt ein kleiner Parameter.

Lösung hierfür:

  1. stattdessen die Anfrage durch scrapy.FormRequest(...) der Schaffung der scrapy.FormRequest.from_response() Methode verwendet (siehe Codebeispiel unten). Dadurch werden die meisten oder sogar alle versteckten Formulardaten erfasst und dazu verwendet, die Daten der FormRequest vorab aufzufüllen.

  2. es scheint, dass Sie vergessen haben, den Antrag zurück, vielleicht ist das ein anderes potenzielles Problem zu ...

  3. soweit ich das __VIEWSTATEGENERATOR erinnern wird auch jedes Mal ändern und hat von der Seite

  4. extrahiert werden
  5. Wenn dies nicht funktioniert, starten Sie Ihren Firefox-Browser mit dem Firebug-Plugin oder den Chrome-Entwicklertools, führen Sie die Anfrage im Browser aus und überprüfen Sie dann die gesamten Header- und Body-Daten der Anfrage mit den gleichen Daten in Ihrer Anfrage. Es wird einen Unterschied geben.

Beispielcode mit all meine Vorschläge:

def parse(self, response): 
    req = scrapy.FormRequest.from_response(response, 
         formdata={ 
     '__VIEWSTATE': response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
     'ctl11$ddlHistoryInMonths':'48', 
     '__EVENTTARGET': 'ctl11$ddlHistoryInMonths', 
     '__EVENTVALIDATION' : response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
     'gaHandicap' : '6.5', 
     'golflink_No' : '2012003003', 
     '__VIEWSTATEGENERATOR' : 'CA0B0334', 
         }, 
         callback=self.parse_details) 
    log.info(req.headers) 
    log.info(req.body) 
    return req 
+0

Vielen Dank ich die Anfrage zurückgegeben und alles hat gut funktioniert dank für den Hinweis, dass die dummen Fehler von mir –