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
參數與更新的表單值。當您檢查的要求,你可以看到所有你需要做一個成功的申請表格值:
所以只是複製他們都到您formdata
。 Asp對formdata真的很肛門,所以需要一些時間來試驗需要什麼和不需要什麼。
我會讓你弄清楚如何自己進入下一頁,通常它只是增加了formadata
的附加鍵,如'page': '2'
。
謝謝@Granitosaurus!我能夠使用您的答案獲得第一頁數據。我正在玩弄formdata來獲取第2頁的內容......看起來像'code''__ EVENTTARGET':'Page $ 2'代碼'是爲了改變頁面,我會做更多的修補。我希望獲得csv,而不是抓取單個頁面,也許'code'__EVENTTARGET:btnLink_Excel'code'是前進的方向 – Ramashekara