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)
相关文章推荐
- Python爬虫 ————POST请求有道翻译{"errorcode":50}
- Python:HTTP请求模块(httplib/urllib,GET/POST,php),Web服务器模块
- [置顶] 【python 爬虫】python如何以request payload形式发送post请求
- python2-爬虫-POST请求的模拟案例_recv
- python爬虫:处理POST请求(获取有道翻译翻译结果)学习笔记
- python爬虫(五)_urllib2:Get请求和Post请求
- scrapy爬虫框架安装与应用(包括post请求、递归访问http)
- 引用开源框架通过AsyncHttpClient处理get/post请求
- Tornado get/post请求异步处理框架分析
- Yaws(erlang web服务器框架) 学习记录之获取GET/POST请求参数
- Python爬虫的post请求简单实例
- python---get/post请求下载指定URL返回的网页内容,出现gzip乱码处理。设置Accept-Encoding为gzip,deflate,返回的网页是乱码
- 03Python爬虫---延时以及GET和POST请求
- Python3爬虫之urllib爬取异步Ajax数据,使用post请求!
- python爬虫之post请求
- [转]Tornado get/post请求异步处理框架分析
- python使用urllib2提交http post请求的方法
- python的get和post方式请求详解
- Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
- python爬虫框架talonspider简单介绍