2017-02-21 30 views
1

我想抓取該網站,其中首先要求我填寫表格,然後獲取到所需的頁面html頁面抓取: http://fcainfoweb.nic.in/PMSver2/Reports/Report_Menu_web.aspxPython的網絡使用Scrapy對於需要填寫表格

我已經寫了下面的代碼,但不知道什麼是錯的。請幫忙:

import scrapy 

class SpidyQuotesViewStateSpider(scrapy.Spider): 
name = 'spidyquotes-viewstate' 
start_urls = ['http://fcainfoweb.nic.in/PMSver2/Reports/Report_Menu_web.aspx'] 
download_delay = 1.5 

def parse(self, response): 
    yield scrapy.FormRequest.from_response(
     response, 
     formdata={ 
      'ctl00_MainContent_ToolkitScriptManager1_HiddenField':response.css('input#ctl00_MainContent_ToolkitScriptManager1_HiddenField::attr(value)').extract_first(), 
      '__EVENTTARGET':'ctl00$MainContent$Rbl_Rpt_type$0', 
      #'__EVENTARGUMENT':'', 
      #'__LASTFOCUS':'', 
      #'__VIEWSTATE':response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
      #'__VIEWSTATEGENERATOR':response.css('input#__VIEWSTATEGENERATOR::attr(value)').extract_first(), 
      #'__VIEWSTATEENCRYPTED':response.css('input#__VIEWSTATEENCRYPTED::attr(value)').extract_first(), 
      #'__EVENTVALIDATION': response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
      'ctl00$MainContent$Ddl_Rpt_type':'Retail', 
      'ctl00$MainContent$ddl_Language':'English', 
      'ctl00$MainContent$Rbl_Rpt_type':'Price+report', 
     }, 

    callback=self.parse_tags, 
    ) 


def parse_tags(self, response): 
    yield scrapy.FormRequest.from_response(
     response, 
     formdata={ 
      'ctl00_MainContent_ToolkitScriptManager1_HiddenField':response.css('input#ctl00_MainContent_ToolkitScriptManager1_HiddenField::attr(value)').extract_first(), 
      '__EVENTTARGET':'ctl00$MainContent$Ddl_Rpt_Option0', 
      #'__EVENTARGUMENT':'', 
      #'__LASTFOCUS':'', 
      #'__VIEWSTATE':response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
      #'__VIEWSTATEGENERATOR':response.css('input#__VIEWSTATEGENERATOR::attr(value)').extract_first(), 
      #'__VIEWSTATEENCRYPTED':response.css('input#__VIEWSTATEENCRYPTED::attr(value)').extract_first(), 
      #'__EVENTVALIDATION': response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
      'ctl00$MainContent$Ddl_Rpt_type':'Retail', 
      'ctl00$MainContent$ddl_Language':'English', 
      'ctl00$MainContent$Rbl_Rpt_type':'Price+report', 
      'ctl00$MainContent$Ddl_Rpt_Option0':'Daily+Prices', 
      }, 
     callback=self.parse_date, 
     ) 

def parse_date(self, response): 
    yield scrapy.FormRequest(
     'http://fcainfoweb.nic.in/PMSver2/Reports/Report_Menu_web.aspx', 
     formdata={ 
      #'ctl00_MainContent_ToolkitScriptManager1_HiddenField':response.css('input#ctl00_MainContent_ToolkitScriptManager1_HiddenField::attr(value)').extract_first(), 
      '__EVENTTARGET':'', 
      #'__EVENTARGUMENT':'', 
      #'__LASTFOCUS':'', 
      #'__VIEWSTATE':response.css('input#__VIEWSTATE::attr(value)').extract_first(), 
      #'__VIEWSTATEGENERATOR':response.css('input#__VIEWSTATEGENERATOR::attr(value)').extract_first(), 
      #'__VIEWSTATEENCRYPTED':response.css('input#__VIEWSTATEENCRYPTED::attr(value)').extract_first(), 
      #'__EVENTVALIDATION': response.css('input#__EVENTVALIDATION::attr(value)').extract_first(), 
      'ctl00$MainContent$Ddl_Rpt_type':'Retail', 
      'ctl00$MainContent$ddl_Language':'English', 
      'ctl00$MainContent$Rbl_Rpt_type':'Price+report', 
      'ctl00$MainContent$Ddl_Rpt_Option0':'Daily+Prices', 
      'ctl00$MainContent$Txt_FrmDate':'01/02/2017', 
      'ctl00$MainContent$btn_getdata1':'Get+Data', 
      }, 
     callback=self.parse_results, 
    ) 

def parse_results(self, response): 
    response.css('div.Panel1') 
+0

你得到一個錯誤?發生什麼不同於你的期望? (人們可能不會運行你的代碼來試圖找出你的問題是什麼......你需要指定問題) –

+0

ValueError:沒有

元素在<200 http://fcainfoweb.nic.in/PMSver2中找到/Error.htm> – Carol

+0

因此,您正在尋找錯誤頁面上的「表單」元素......也許資源管理器爲什麼要提取錯誤頁面而不是您想要的頁面? –

回答

0

你在刮一個.Net網站。他們使用像VIEWSTATE和EVENTVALIDATION等變量,你必須發送相同的值和請求。

enter image description here

+0

嘗試相同,仍然是重定向到錯誤頁面。我在我的代碼中所做的更改現在在我的問題中可見,仍然沒有進展。 – Carol

+0

複製每一件事....您是否發送任何'user-agent'字符串?你必須這樣做 – Umair

0

也許你需要指定報頭爲好。 與谷歌督察檢查什麼是最新的,或者你可以快速抓住下面。

headers = { 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
    'Accept-Encoding': 'gzip, deflate, br', 
    'Accept-Language': 'en-US,en;q=0.8,ru;q=0.6', 
    'Cache-Control': 'max-age=0', 
    'Connection': 'keep-alive', 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Upgrade-Insecure-Requests': '1', 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36', 
    'X-Compress': '0', 
} 
+0

即使這沒有幫助! – Carol

+0

你有沒有看過Inspector?我看到有不同的標題+ Origin和Referer – andjelx

0

見下文 - 你需要遵循相同的

enter image description here

enter image description here

+0

即使這沒有幫助。 – Carol