本文介绍如何在Scrapy中使用无忧代理(www.data5u.com)的爬虫动态代理IP,以及如何设置User-Agent.

动态转发参考https://blog.csdn.net/u010978757/article/details/104521024

一、创建Scrapy工程
scrapy startproject 工程名

二、进入工程目录,根据爬虫模板生成爬虫文件
scrapy genspider -l # 查看可用模板
scrapy genspider -t 模板名 爬虫文件名 允许的域名

三、定义爬取关注的数据(items.py文件)
四、编写爬虫文件
五、设置IP池或用户代理

  1. 在settings.py同级目录下新建一个文件data5u.py(第8步会用到),添加如下代码:
IPPOOL = [ ]
  1. 创建下载中间文件middlewares.py(与settings.py同一个目录),代码如下:
# -*- coding: UTF-8 -*-
'''
Python 3.x
无忧代理IP Created on 2018年07月11日
描述:本段代码是Scrapy的代理中间件,用于设置代理IP
@author: www.data5u.com
'''
# 导入随机模块
import random
# 导入data5u文件中的IPPOOL
from data5u import IPPOOL
# 导入官方文档对应的HttpProxyMiddleware
from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddlewareclass IPPOOlS(HttpProxyMiddleware):# 初始化def __init__(self, ip=''):self.ip = ip# 请求处理def process_request(self, request, spider):# 先随机选择一个IPthisip = random.choice(IPPOOL)print("当前使用IP是:"+ thisip)request.meta["proxy"] = "http://"+thisip
  1. 在settings.py中配置下载中间件,代码如下:
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,'modetest.middlewares.IPPOOlS' : 125
}
  1. 在settings.py文件中添加用户UserAgent的信息,如:
# 设置用户代理池
UAPOOL= ["Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
]
  1. 创建下载中间文件uamid.py(与settings.py同一个目录),代码为:
# -*- coding: UTF-8 -*-
'''
Python 3.x
无忧代理IP Created on 2018年07月11日
描述:本段代码是Scrapy的下载中间件,用于模拟UserAgent
@author: www.data5u.com
'''
# 导入随机模块
import random
# 导入settings文件中的UAPOOL
from settings import UAPOOL
# 导入官方文档对应的HttpProxyMiddleware
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddlewareclass Uamid(UserAgentMiddleware):# 初始化 注意一定要user_agent,不然容易报错   def __init__(self, user_agent=''):self.user_agent = user_agent# 请求处理def process_request(self, request, spider):# 先随机选择一个用户代理thisua = random.choice(UAPOOL)print("当前使用User-Agent是:"+thisua)request.headers.setdefault('User-Agent',thisua)
  1. 在settings.py中配置下载中间件(合并了第三步的代码):
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,'modetest.uamid.Uamid': 1
}
  1. 整体的settings.py代码如下:
# -*- coding: UTF-8 -*-
'''
Python 3.x
无忧代理IP Created on 2018年07月11日
描述:本段代码是Scrapy的配置信息
@author: www.data5u.com
'''#========================================# 设置IP池和用户UserAgent#  禁止本地Cookie
COOKIES_ENABLED = False# 设置用户代理池
UAPOOL = ["Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
]# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {'scrapy.contrib.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,'modetest.middlewares.IPPOOlS' : 125,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,'modetest.uamid.Uamid': 1
}#============================================
  1. 定义一个线程,定时从无忧代理API接口中获取IP,存入data5u.py中的IPPOOL变量中,代码如下:
# -*- coding: UTF-8 -*-
'''
Python 3.x
无忧代理IP Created on 2018年07月11日
描述:本段代码定时从无忧代理API接口获取代理IP,存入IP池中
@author: www.data5u.com
'''
import requests;
import time;
import threading;
from data5u import IPPOOL;
from requests.packages import urllib3;# 获取代理IP的线程类
class GetIpThread(threading.Thread):def __init__(self,apiUrl, fetchSecond):super(GetIpThread, self).__init__();self.fetchSecond=fetchSecond;self.apiUrl=apiUrl;def run(self):while True:# 获取IP列表res = requests.get(self.apiUrl).content.decode()# 按照\n分割获取到的IPIPPOOL = res.split('\n');# 休眠time.sleep(self.fetchSecond);
  1. 在您爬虫的启动类(if name == ‘main’:)里面添加如下代码定时获取代理IP:
# 这里填写无忧代理IP提供的API订单号(请到用户中心获取)order = "请把这里替换为您的IP提取码";# 获取IP的API接口apiUrl = "http://api.ip.data5u.com/dynamic/get.html?order=" + order;# 获取IP时间间隔,建议为5秒fetchSecond = 5;# 开始自动获取IPGetIpThread(apiUrl, fetchSecond).start();

参考链接:http://www.data5u.com/help/article-61.html

在Scrapy中使用爬虫动态代理IP相关推荐

  1. 做了一个动态代理 IP 池项目,邀请大家免费测试~

    长期在掘金潜水, 现在打算出来创业了,目前公司在深圳. 做了点啥呢, 就是给爬虫用的动态代理 IP 池啦. 目前运行很稳定, 邀请大家来免费测试使用, 获取免费激活码:微信公众号"2808p ...

  2. 爬虫篇——代理IP爬取备用及存储

    爬虫篇--代理IP爬取备用及存储 代码 代码 本文通过抓取免费的高匿IP代理,将其写入列表并保存为json格式文件,且将代码进行了封装,方便以后抓取数据时动态的更新handle的IP地址,从一方面避免 ...

  3. python ip动态代理_Scrapy 配置动态代理IP的实现

    应用 Scrapy框架 ,配置动态IP处理反爬. # settings 配置中间件 DOWNLOADER_MIDDLEWARES = { 'text.middlewares.TextDownloade ...

  4. 【完美解决】爬虫伪装代理IP方案

    爬虫伪装代理IP 爬虫程序频繁访问某网站,很容易触发网站的保护机制,造成无法访问.本文将解决这一问题. 首先要伪装请求头,request默认是python-requests,emmm,这不是找事嘛,首 ...

  5. 动态代理IP有什么用?

    动态代理IP有什么用?随着互联网时代的来临,很多网民由于工作需要总是使用动态IP地址,否则会经常被网站给限制了,由于反复的操作容易引起IP限制,例如平常我们发布帖子,多发几个立即就提示帖子被删,或是持 ...

  6. 如何利用动态代理IP来做SEO(网络营销)

    对动态代理IP大家都不陌生,今天我们来聊下如何利用动态代理ip来做SEO优化.其实除了SEO很多网络营销也都需要用到代理IP,因为很多网络营销的用户都知道,投票.注册帐号.发帖子等工作,都需要用到代理 ...

  7. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  8. 使用爬虫实现代理IP池之放弃篇

    2019独角兽企业重金招聘Python工程师标准>>> 啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的) ...

  9. python爬虫设置代理ip池

    在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代 ...

最新文章

  1. 016_css()方法
  2. 美团酒店Node全栈开发实践
  3. 【学习笔记】Redis的geohash数据结构介绍
  4. 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
  5. 程序员水平自测题:程序员们,想知道你的技术达到了什么水平吗?
  6. java线上问题定位_线上java.lang.OutOfMemoryError问题定位三板斧
  7. 使用“管道”与“应用程序生命周期”重构:可插拔模块
  8. [poj1410]Intersection
  9. docker php镜像推荐,Docker 常用镜像整理
  10. mysql replace into语句学习
  11. 获取IP及判断IP是否在区间
  12. 《Core Data应用开发实践指南》一导读
  13. SparkSession与SparkContext SparkConf SQLContext HiveContext StreamingContext
  14. 无线Wifi密码之暴力破解篇(WPA)
  15. 笔记本电脑连接加密无线路由器。
  16. 判断43是不是质数用c语言,1是素数吗(c语言判断一个数为素数)
  17. 视频下载工具annie 安装与使用
  18. 软件测试处理事物一般步骤,软件设计师考试题型分析及解法经验
  19. win7,win10访问Samba的共享目录提示“登录失败:用户名或密码错误”最终解决方法
  20. 程序员为什么单身?细数程序员“六宗罪”

热门文章

  1. 求职-平安产险科技一二面
  2. Java基础---继承、抽象、接口
  3. 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(四)FreeRTOS系统下LwIP-1.4.1的移植
  4. Android 顶部菜单栏 定义背景图片
  5. 转行数据分析师后悔了?转行需要做哪些准备?
  6. 想转行做程序员?转行不难,难的是以后不后悔。
  7. [转]字典学习/稀疏编码
  8. 【博客】RealSense
  9. 什么是软件测试,软件测试的目的?
  10. 红帽linux安装docker,在CentOS7.6、红帽7.6系统中安装Docker:只需3条命令