Scrapy框架--代理和cookie

如何发起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"

settings.py

# DOWNLOADER_MIDDLEWARES = {
#    'proxyPro.middlewares.ProxyproDownloaderMiddleware': 543,
# }
DOWNLOADER_MIDDLEWARES = {
   'proxyPro.middlewares.MyProxy': 543,
}
原文地址:https://www.cnblogs.com/foremostxl/p/10092170.html