在Scrapy中使用爬虫动态代理IP
本文介绍如何在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池或用户代理
- 在settings.py同级目录下新建一个文件data5u.py(第8步会用到),添加如下代码:
IPPOOL = [ ]
- 创建下载中间文件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
- 在settings.py中配置下载中间件,代码如下:
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,'modetest.middlewares.IPPOOlS' : 125
}
- 在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"
]
- 创建下载中间文件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)
- 在settings.py中配置下载中间件(合并了第三步的代码):
# 配置下载中间件的连接信息
DOWNLOADER_MIDDLEWARES = {'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 2,'modetest.uamid.Uamid': 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
}#============================================
- 定义一个线程,定时从无忧代理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);
- 在您爬虫的启动类(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相关推荐
- 做了一个动态代理 IP 池项目,邀请大家免费测试~
长期在掘金潜水, 现在打算出来创业了,目前公司在深圳. 做了点啥呢, 就是给爬虫用的动态代理 IP 池啦. 目前运行很稳定, 邀请大家来免费测试使用, 获取免费激活码:微信公众号"2808p ...
- 爬虫篇——代理IP爬取备用及存储
爬虫篇--代理IP爬取备用及存储 代码 代码 本文通过抓取免费的高匿IP代理,将其写入列表并保存为json格式文件,且将代码进行了封装,方便以后抓取数据时动态的更新handle的IP地址,从一方面避免 ...
- python ip动态代理_Scrapy 配置动态代理IP的实现
应用 Scrapy框架 ,配置动态IP处理反爬. # settings 配置中间件 DOWNLOADER_MIDDLEWARES = { 'text.middlewares.TextDownloade ...
- 【完美解决】爬虫伪装代理IP方案
爬虫伪装代理IP 爬虫程序频繁访问某网站,很容易触发网站的保护机制,造成无法访问.本文将解决这一问题. 首先要伪装请求头,request默认是python-requests,emmm,这不是找事嘛,首 ...
- 动态代理IP有什么用?
动态代理IP有什么用?随着互联网时代的来临,很多网民由于工作需要总是使用动态IP地址,否则会经常被网站给限制了,由于反复的操作容易引起IP限制,例如平常我们发布帖子,多发几个立即就提示帖子被删,或是持 ...
- 如何利用动态代理IP来做SEO(网络营销)
对动态代理IP大家都不陌生,今天我们来聊下如何利用动态代理ip来做SEO优化.其实除了SEO很多网络营销也都需要用到代理IP,因为很多网络营销的用户都知道,投票.注册帐号.发帖子等工作,都需要用到代理 ...
- 利用多线程爬虫搭建代理ip池的两种方法(含源码)
搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...
- 使用爬虫实现代理IP池之放弃篇
2019独角兽企业重金招聘Python工程师标准>>> 啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的) ...
- python爬虫设置代理ip池
在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代 ...
最新文章
- 016_css()方法
- 美团酒店Node全栈开发实践
- 【学习笔记】Redis的geohash数据结构介绍
- 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
- 程序员水平自测题:程序员们,想知道你的技术达到了什么水平吗?
- java线上问题定位_线上java.lang.OutOfMemoryError问题定位三板斧
- 使用“管道”与“应用程序生命周期”重构:可插拔模块
- [poj1410]Intersection
- docker php镜像推荐,Docker 常用镜像整理
- mysql replace into语句学习
- 获取IP及判断IP是否在区间
- 《Core Data应用开发实践指南》一导读
- SparkSession与SparkContext SparkConf SQLContext HiveContext StreamingContext
- 无线Wifi密码之暴力破解篇(WPA)
- 笔记本电脑连接加密无线路由器。
- 判断43是不是质数用c语言,1是素数吗(c语言判断一个数为素数)
- 视频下载工具annie 安装与使用
- 软件测试处理事物一般步骤,软件设计师考试题型分析及解法经验
- win7,win10访问Samba的共享目录提示“登录失败:用户名或密码错误”最终解决方法
- 程序员为什么单身?细数程序员“六宗罪”
热门文章
- 求职-平安产险科技一二面
- Java基础---继承、抽象、接口
- 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(四)FreeRTOS系统下LwIP-1.4.1的移植
- Android 顶部菜单栏 定义背景图片
- 转行数据分析师后悔了?转行需要做哪些准备?
- 想转行做程序员?转行不难,难的是以后不后悔。
- [转]字典学习/稀疏编码
- 【博客】RealSense
- 什么是软件测试,软件测试的目的?
- 红帽linux安装docker,在CentOS7.6、红帽7.6系统中安装Docker:只需3条命令