第10页后使用__VIEWSTATE和__EVENTVALIDATION进行分页

时间:2019-05-16 14:06:05

标签: python scrapy

我正在使用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,但是性能太低了。

0 个答案:

没有答案