我正在使用Scrapy爬网ASP.NET网站,但无法浏览第10页。
场景:
这样的AJAX分页: !(https://i.imgur.com/uMAQNDI.png)
感谢Scrapy works fine until page 12 of asp site, then 500 error,问题与我的问题非常相似
蜘蛛在执行对AJAX的FormRequest.from_response时,不会从下一个响应中获取__EVENTVALIDATION
和__VIEWSTATE
(只是__POSTBACK
生成的内容-我认为-而不是完整的HTML),因此它无法再次调用第10页进行分页。
我获取第1-10页的方法是这样的:
def pages(self, response):
for page in pages:
head = {'X-MicrosoftAjax': 'Delta=true'}
data = {'__EVENTTARGET': 'ctl00$ContentPlaceHolder1$TabPedidos$tabAComprar$gvAComprar',
'__EVENTARGUMENT': 'Page${}'.format(page),
'ctl00$ScriptManager1': 'ctl00$ContentPlaceHolder1$upPanel|ctl00$ContentPlaceHolder1$TabPedidos$tabAComprar$gvAComprar',
'__ASYNCPOST': 'true',
'__EVENTVALIDATION': response.css('input#__EVENTVALIDATION::attr(value)').extract_first(),
'__VIEWSTATE': response.css('input#__VIEWSTATE::attr(value)').extract_first(),
'__VIEWSTATEGENERATOR': response.css('input#__VIEWSTATEGENERATOR::attr(value)').extract_first(),
'__AjaxControlToolkitCalendarCssLoaded': '',
'ctl00_ContentPlaceHolder1_TabPedidos_ClientState': '{"ActiveTabIndex":0,"TabState":[true,true]}',
'__VIEWSTATEENCRYPTED': ''}
yield FormRequest.from_response(response, url=url, callback=self.parse_ajax, formdata=data, headers=head, dont_click=True)
def parse_ajax(self, response):
# some xpath parse in there
yield item
当蜘蛛尝试爬网> 11时,他将我放回了第1页。我如何到达该页面?有更好的方法来发出AJAX请求(甚至分页)吗?
此外,我尝试使用Selenium和Scrapy-Splash,但是性能太低了。