如何发起post请求?
代理和cookie:
cookie:豆瓣网个人登录,获取该用户个人主页这个二级页面的页面数据。
如何发起post请求?
一定要对start_requests方法进行重写。
1. Request()方法中给method属性赋值成post
2. FormRequest()进行post请求的发送
简单测试:
在爬虫文件中
import scrapy class PostdemoSpider(scrapy.Spider): name = 'postDemo' #allowed_domains = ['www.baidu.com'] start_urls = ['https://fanyi.baidu.com/sug'] def start_requests(self): print('start_request') data ={'kw':'dog'} for url in self.start_urls: yield scrapy.FormRequest(url=url,formdata=data,callback=self.parse) def parse(self, response): print(response.text)
在settings配置
然后执行:
cookie:豆瓣网个人登录,获取该用户个人主页这个二级页面的页面数据。
先创建一个工程doubanPro
cd 到创建的目录下
----------
创建爬虫文件
1. 在命令行下 cd 进入工程所在文件夹
2.scrapy genspider 爬虫文件的名称 起始url
爬虫文件 douban.py
import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' # allowed_domains = ['www.douban.com'] start_urls = ['https://accounts.douban.com/login'] # 重写start_requests方法 def start_requests(self): for url in self.start_urls: # 排除验证码的情况 将请求参数封装到字典 data = { 'source': 'movie', 'redir': 'https://movie.douban.com /', 'form_email': '836342406@qq.com', 'form_password': 'douban836342406,.', 'login': '登录' } yield scrapy.FormRequest(url=url,formdata=data,callback=self.parse) # 针对个人主页数据进行解析操作 def parseBySecondPage(self,response): fp = open('second.html','w',encoding='utf-8') fp.write(response.text) def parse(self, response): # 登录成功后的页面进行存储 fp = open('main.html','w',encoding='utf-8') fp.write(response.text) # 获取当前用户的个人主页 url = 'https://www.douban.com/people/188197188/' yield scrapy.Request(url=url,callback=self.parseBySecondPage)
执行
代理操作-代理ip的更换
下载中间件作用:拦截请求,可以将请求的ip进行更换。 流程: 1. 下载中间件类的自制定 a) object b) 重写process_request(self,request,spider)的方法 2. 配置文件中进行下载中间价的开启
新建一个proxyPro的工程
建立proxyDemo.py爬虫文件
1、下载中间件类的自定义
proxyDemo.py
import scrapy class ProxydemoSpider(scrapy.Spider): name = 'proxyDemo' #allowed_domains = ['www.baidu.com'] start_urls = ['https://www.baidu.com/s?wd=ip'] def parse(self, response): fp = open('proxy.html','w',encoding='utf-8') fp.write(response.text)
middlewares.py
from scrapy import signals #自定义一个下载中间件的类,在类中事先process_request(处理中间价拦截到的请求)方法 class MyProxy(object): def process_request(self,request,spider): #请求ip的更换 request.meta['proxy'] = "https://118.70.185.14:8080"
代理ip------------>"https://118.70.185.14:8080"
![](https://img2018.cnblogs.com/blog/1447456/201812/1447456-20181209202449240-778193582.png)
settings.py
# DOWNLOADER_MIDDLEWARES = { # 'proxyPro.middlewares.ProxyproDownloaderMiddleware': 543, # } DOWNLOADER_MIDDLEWARES = { 'proxyPro.middlewares.MyProxy': 543, }