2016-02-16 94 views
1

我很熟悉用Scrapy抓取網站,但是我似乎無法抓取this one(javascript或許?)。Scrapy-Javascript網站

我試圖下載商品的歷史數據,從該網站的一些個人研究: http://www.mcxindia.com/SitePages/BhavCopyDateWiseArchive.aspx

在這個網站上,你將不得不選擇日期,然後單擊去。數據加載完成後,您可以點擊「在Excel中查看」下載當天商品價格的CSV文件。我試圖建立一個刮板來下載這些CSV文件幾個月。但是,這個網站似乎是一個難以解決的問題。任何幫助將不勝感激。

事情我已經嘗試: 1)查看頁面源代碼,看看是否正在將數據加載但不顯示(隱藏) 2)使用螢火蟲,看看是否有任何Ajax請求 3)後修改的頭看看我能否獲得不同日子的數據。帖子標題看起來非常複雜。

回答

2

Asp.net網站很難抓取,因爲它依賴於viewsessions,對請求和其他無意義的負載非常嚴格。

幸運的是,你的情況似乎很簡單。你scrapy的做法應該是這個樣子:

import scrapy 
from scrapy import FormRequest 

class MxindiaSpider(scrapy.Spider): 
    name = "mxindia" 
    allowed_domains = ["mcxindia.com"] 
    start_urls = ('http://www.mcxindia.com/SitePages/BhavCopyDateWiseArchive.aspx',) 

    def parse(self, response): 
     yield FormRequest.from_response(response, 
             formdata={ 
              'mTbdate': '02/13/2015', # your date here 
              'ScriptManager1': 'MupdPnl|mImgBtnGo', 
              '__EVENTARGUMENT': '', 
              '__EVENTTARGET': '', 
              'mImgBtnGo.x': '12', 
              'mImgBtnGo.y': '9' 
             }, 
             callback=self.parse_cal,) 

    def parse_cal(self, response): 
     inspect_response(response, self) # everything is there! 

我們在這裏做的是從response對象,我們已經創建FormRequest。它足夠可以找到<input><form>字段並生成formdata。 但是,某些沒有默認值的輸入字段或我們需要覆蓋默認值的字段需要使用formdata參數重寫。 因此,我們提供formdata參數與更新的表單值。當您檢查的要求,你可以看到所有你需要做一個成功的申請表格值: enter image description here

所以只是複製他們都到您formdata。 Asp對formdata真的很肛門,所以需要一些時間來試驗需要什麼和不需要什麼。

我會讓你弄清楚如何自己進入下一頁,通常它只是增加了formadata的附加鍵,如'page': '2'

+0

謝謝@Granitosaurus!我能夠使用您的答案獲得第一頁數據。我正在玩弄formdata來獲取第2頁的內容......看起來像'code''__ EVENTTARGET':'Page $ 2'代碼'是爲了改變頁面,我會做更多的修補。我希望獲得csv,而不是抓取單個頁面,也許'code'__EVENTTARGET:btnLink_Excel'code'是前進的方向 – Ramashekara