博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy之Cookie和代理
阅读量:6709 次
发布时间:2019-06-25

本文共 2478 字,大约阅读时间需要 8 分钟。

cookie

cookie: 获取百度翻译某个词条的结果

一定要对start_requests方法进行重写。

两种解决方案:

1. Request()方法中给method属性赋值成post

2. FormRequest()进行post请求的发送

 

爬虫相关操作

# -*- coding: utf-8 -*-import scrapy# 需求:将百度翻译中指定词条对应的翻译结果进行获取class PostdemoSpider(scrapy.Spider):    name = 'postDemo'    # allowed_domains = ['www.baidu.com']    start_urls = ['https://fanyi.baidu.com/sug']    # 该方法(默认是发送get请求)其实是父类中的一个方法:该方法可以对start_urls列表中的元素进行get请求的发送    # 发起post:    # 1.将Request方法中method参数赋值成post(不建议)    # 2.FormRequest()可以发起post请求(推荐)    def start_requests(self):        print('start_requests()')        # post请求的参数        data = {            'kw': 'dog',        }        for url in self.start_urls:            # formdata:请求参数对应的字典            yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse)    def parse(self, response):        print(response.text)

 

配置

BOT_NAME = 'postPro'SPIDER_MODULES = ['postPro.spiders']NEWSPIDER_MODULE = 'postPro.spiders'USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'# Obey robots.txt rulesROBOTSTXT_OBEY = False

 

 

代理:

下载中间件作用:拦截请求,可以将请求的ip进行更换。

流程:

1. 下载中间件类的自制定

object

重写process_request(self,request,spider)的方法

2. 配置文件中进行下载中间价的开启。

 

代码实现

爬虫相关操作

# -*- coding: utf-8 -*-import scrapyclass ProxySpider(scrapy.Spider):    name = 'proxy'    # allowed_domains = ['www.baidu.com']    start_urls = ['http://www.baidu.com/s?wd=ip']    def parse(self, response):        fp = open('proxy.html', 'w', encoding='utf-8')        fp.write(response.text)

中间件

# -*- coding: utf-8 -*-# Define here the models for your spider middleware## See documentation in:# https://doc.scrapy.org/en/latest/topics/spider-middleware.htmlfrom scrapy import signals# 自定义一个下载中间件的类,在类中实现process_request(处理中间件拦截到的请求)方法class Myproxy(object):    def process_request(self, request, spider):        # 请求ip的更换        request.meta['proxy'] = 'http://60.217.137.218:8060'# 默认的用不到,可以删除

 

配置(开启中间件)

BOT_NAME = 'proxyDemo'SPIDER_MODULES = ['proxyDemo.spiders']NEWSPIDER_MODULE = 'proxyDemo.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent# USER_AGENT = 'proxyDemo (+http://www.yourdomain.com)'USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'# Obey robots.txt rulesROBOTSTXT_OBEY = FalseDOWNLOADER_MIDDLEWARES = {    'proxyDemo.middlewares.Myproxy': 543,}

 

 

 

    

转载于:https://www.cnblogs.com/lshedward/p/10697412.html

你可能感兴趣的文章
Concurrent use of embedded Ruby in Java (using JRuby)
查看>>
基础才是重中之重~.net中的显式事务与隐式事务
查看>>
转载 - 通过设置P3P头来实现跨域访问COOKIE
查看>>
使用泛型创建只读集合
查看>>
SQL Server 中如何判断表是否存在
查看>>
delphi日期格式显示及文件打开方式小结
查看>>
最近看的一些东东
查看>>
POJ 3281 Dining(最大流)
查看>>
SQL Server Management Studio 过期无法使用解决办法
查看>>
Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)...
查看>>
【数据结构】数组和广义表
查看>>
css3中transform的用法
查看>>
为什么Domain controller上的time synchronization非常重要?
查看>>
[转]CDN(内容分发网络)技术原理
查看>>
js中,(function(){})()的用法解析
查看>>
薏米红豆粥功效及做法介绍
查看>>
Quick-Cocos2d-x 集成 Google protobuf 方法
查看>>
javaSE基础之记事本编程
查看>>
Unity3d与android通信
查看>>
东大OJ-1040-Count-快速幂方法求解斐波那契-
查看>>