您的位置:首页 > 编程语言 > Python开发

Python爬虫——9.scrapy框架get/post请求

2018-01-17 20:46 706 查看
接触了这么久的scrapy框架,你是否会疑惑,在scrapy底层,代码到底是怎么运行的呢?原来由一个起始url,通过scrapy.Request()函数会默认封装为一个get请求对象,该对象触发找到引擎模块scrapy.engine,引擎模块指向调度模块scrapy.schedule,调度模块接收到后对start_urls列表进行有序排列,然后将信息返回给引擎,引擎转而启动下载模块进行数据的采集,采集好的数据会直接传给爬虫程序中的parse函数进行数据处理。scrapy框架默认为get请求,若要发起post请求,则需要研究start_request()函数,该函数返回的是请求对象,若重新返回,则可以自定义post请求对象,如下# coding:utf-8'''关于scrapy框架的底层代码的了解'''import scrapyclass GetSpider(scrapy.Spider):name='getspider'allowed_domains=['baidu.com']start_urls=['http://www.baidu.com']def parse(self,response):'''请求的数据采集工作,有scrapy框架自动完成爬虫【起始地址列表start_urls】->由scrapy.Request()封装为请求对象->scrapy.enging引擎对象->scrapy.schedule 调度模块->scrapy.download下载模块->scrapy.engine引擎模块->爬虫程序得到数据->爬虫【parse函数】进行后续的数据处理->请求的操作,不能由爬虫程序控制,而是scaapy自动调度,发送了get请求:param response::return:'''passclass PostSpider(scrapy.Spider):name='postspider'allowed_domains=['csdn.net']start_urls=['https://www.csdn.net/']# 重写start_request函数def start_requests(self):'''重写start_requests函数,发送自定义请求:return:return scrapy.Request(self.start_urls[0],method='POST'''# FormRequest是专门用来发送post请求的函数return scrapy.FormRequest(self.start_urls[0],# formdata为字典,formdata={'username':'admin','password':'123'},# 重写了start_requests函数,记得以一定要重定义callback函数,使其指向parse,进行数据处理callback=self.parse)def parse(self,response):'''这个函数中,专门用来处理post请求得到的响应数据:param response::return:'''pass
下面展示一个scrapy框架发送post请求获取数据的实例:登录csdn后获取首页数据,这里要注意流水号的获取。
# coding:utf-8'''使用scrapy框架,提交post请求,以登录csdn为例'''# 引入需要得模块import scrapy# 定义爬虫程序类型class CsdnSpider(scrapy.Spider):# 定义爬虫程序的名称,用于在命令行启动程序时使用name='csdn'# 定义爬虫的限制域allowed_domains=['csdn.net']# 定义起始urlstart_urls=['https://passport.csdn.net/account/login']def parse(self,response):'''重写start_requests方法,自定义请求对象:return:'''# 获取csdn登录流水号lt=response.xpath("//input[@name='lt']/@value").extract()[0]return scrapy.FormRequest.from_response(response,self.start_urls[0],# 填写post提交数据,以字典的形式,k值由网页中的对应id/name属性名称决定,v值是自己的登录信息formdata={'username':'admin','password':'123','lt':lt},callback=self.parse_response)def parse_response(self, response):'''数据处理函数,用于接收post数据提交后获取的数据,这里是登录csdn,post提交登录后获取首页数据:param response::return:'''with open('csdn.html','w') as f:f.write(response.body)

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: