大佬教程收集整理的这篇文章主要介绍了使用PostBack数据在页面中爬行javascript Python Scrapy,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这种分页并不是看起来那么简单。解决它是一个有趣的挑战。以下是有关该解决方案的一些重要说明:
request.meta
BaseSpider
因为分页涉及一些逻辑headers
假装成为真正的浏览器很重要Formrequest
s很重要,dont_filter=True
因为我们基本上是POST
向相同的URL发出请求,但参数不同编码:
import re
from scrapy.http import Formrequest
from scrapy.spIDer import BaseSpIDer
headerS = {
'X-MicrosoftAJAX': 'Delta=true',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'
}
URL = 'http://exitrealty.com/agent_List.aspx?firstname=&lastname=&country=USA&state=NY'
class ExitRealtySpIDer(BaseSpIDer):
name = "exit_realty"
allowed_domains = ["exitrealty.com"]
start_urls = [URL]
def parse(self, responsE):
# submit a form (first pagE)
self.data = {}
for form_input in response.CSS('form#aspnetForm input'):
name = form_input.xpath('@name').extract()[0]
try:
value = form_input.xpath('@value').extract()[0]
except IndexError:
value = ""
self.data[name] = value
self.data['ctl00$MainContent$ScriptManager1'] = 'ctl00$MainContent$updatePanel1|ctl00$MainContent$agentList'
self.data['__EVENTTARGET'] = 'ctl00$MainContent$List'
self.data['__EVENTARGUMENT'] = 'Page$1'
return Formrequest(url=URL,
method='POST',
callBACk=self.parse_page,
formdata=self.data,
Meta={'page': 1},
dont_filter=True,
headers=headerS)
def parse_page(self, responsE):
current_page = response.Meta['page'] + 1
# parse agents (Todo: yIEld items instead of prinTing)
for agent in response.xpath('//a[@class="regtext"]/text()'):
print agent.extract()
print "------"
# request the next page
data = {
'__EVENTARGUMENT': 'Page$%d' % current_page,
'__EVENTVALIDATION': re.search(r"__EVENTVALIDATION\|(.*?)\|", response.body, re.MulTIliNE).group(1),
'__VIEWSTATE': re.search(r"__VIEWSTATE\|(.*?)\|", response.body, re.MulTIliNE).group(1),
'__ASYNCPOST': 'true',
'__EVENTTARGET': 'ctl00$MainContent$agentList',
'ctl00$MainContent$ScriptManager1': 'ctl00$MainContent$updatePanel1|ctl00$MainContent$agentList',
'': ''
}
return Formrequest(url=URL,
method='POST',
formdata=data,
callBACk=self.parse_page,
Meta={'page': current_pagE},
dont_filter=True,
headers=headerS)
我正在通过Scrapy使用ASP.NET编程来浏览某些目录。
要爬网的页面编码如下:
javascript:__dopostBACk('ctl00$MainContent$List','Page$X')
其中x是1到180之间的整数。MainContent参数始终相同。我不知道如何爬进这些。我希望可以像allow=('Page$')
或一样简单地向SLE规则中添加一些内容attrs='__dopostBACk'
,但是我想我必须更加棘手才能从javascript“链接”中提取信息。
如果更容易从JavaScript代码中“取消屏蔽”每个绝对链接并将其保存到csv,则可以使用该csv将请求加载到新的抓取工具中,也可以。
以上是大佬教程为你收集整理的使用PostBack数据在页面中爬行javascript Python Scrapy全部内容,希望文章能够帮你解决使用PostBack数据在页面中爬行javascript Python Scrapy所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。