什么是ip代理?

我们电脑访问网站,其实是访问远程的服务器,通过ip地址识别是那个机器访问了服务器,服务器就知道数据该返回给哪台机器,我们生活中所用的网络是局域网,ip是运营商随机分配的,是一种直接访问服务器的方式

代理服务器是一种间接方式,本地机器访问ip代理服务器,ip代理服务器帮我们发起服务请求,然后代理服务器接收数据返回给本机,由于中间有了层ip代理服务器,访问的速度和稳定性取决于代理服务器的性能

常规访问

    用户 >> ip  >> 服务器

代理访问

    用户用户 >> ip  >> 代理ip服务器 >> 服务器

最稳定的ip是自己的本地ip,免费ip很多人用,建议使用收费

有哪些好用的ip代理?

西刺免费代理:

    建议选择高匿ip地址,访问服务器时候不带本地ip

如何设置ip代理池?

  1. 建立一张数据表存放ip地址,端口,请求协议

  2. 在公共方法中定义一个获取ip信息的爬虫

  1 2 步已经完成:http://www.cnblogs.com/2bjiujiu/p/7355234.html

  3. 从数据库中随机获取一行数据: select ip, port from 表名 order by rand() limit 1

  4. 检查ip是否可有,可用,返回ip和端口,不可用删除ip和再次随机新的ip再次检查是否可用

#!/usr/bin/python3

__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' import pymysql
import requests class RandomIp(object):
headers = {
'Referer': 'https://www.baidu.com',
} def __init__(self):
# 初始化连接配置和连接参数
db_settings = {
'host': 'localhost',
'db': 'db_name',
'user': 'user_name',
'password': 'password',
'charset': 'utf8',
'use_unicode': True
} # self.db_setting = crawler.settings.get('db_setting')
self.conn = pymysql.connect(**db_settings)
self.cursor = self.conn.cursor() # # 获取配置文件中db_settings
# @classmethod
# def from_crawler(cls, crawler):
# return cls(crawler) def get_random_ip(self):
"""获取有效的ip地址"""
# 建立索引映射
ip, port, ip_type = 0, 1, 2
# sql查询语句,随机获取一行值
sql = 'select ip, port, ip_type from ip_server order by rand() limit 1'
try:
# 从数据库中获取一行值
self.cursor.execute(sql)
# 对于查询结果不能直接获取,需要通过fetchall,索引来取每个值
for info in self.cursor.fetchall():
ip = info[ip]
port = info[port]
ip_type = info[ip_type]
except Exception as e:
print(e)
else:
effective_ip = self.check_ip(ip, port, ip_type)
if effective_ip:
return effective_ip
else:
self.del_usedless_ip(ip)
return self.get_random_ip() def check_ip(self, ip, port, ip_type):
"""检查这个ip是否有效"""
http_url = 'https://www.baidu.com'
proxy_url = '{ip_type}://{ip}:{port}'.format(ip_type=ip_type.lower(), ip=ip, port=port)
try:
prox_dict = {
'http': proxy_url
}
response = requests.get(http_url, proxies=prox_dict, headers=self.headers)
except Exception as e:
print(e)
return False
else:
if 200 <= response.status_code <= 300:
return proxy_url
else:
self.del_usedless_ip(ip)
return False
pass def del_usedless_ip(self, ip):
"""删除无效的ip"""
sql = 'delete from ip_server where ip=%s' % ip
self.cursor.execute(sql)
self.conn.commit() if __name__ == '__main__':
# 测试
ip = RandomIp()
effective_ip = ip.get_random_ip()
print(effective_ip)
pass

  5. 在middlewares中添加以类

from tools.random_ip import RandomIp
# 导入获取随机ip的类,就是上面写的类 class RandomIpMiddleware(object): def process_request(self, request, spider):
# 更改代理ip,但是很不稳定
get_ip = RandomIp()
request.meta['proxy'] = get_ip.get_random_ip()

  6. setting中注册

DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'infoisland.middlewares.RandomUserAgentMiddleware': 400,
'infoisland.middlewares.RandomIpMiddleware': 600, }

如何使用第三方库?

scrapy-proxies       文件方式读取,可自行修改       -- githup搜索

scrapy-crawlera                -- 收费

tor                                 -- 洋葱浏览器,多次转发,经过洋葱,实现ip匿名,安全稳定,需要vpn

scrapy_随机ip代理池的更多相关文章

  1. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  2. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用

    站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...

  3. 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池

    前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...

  4. 爬取西刺ip代理池

    好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...

  5. python开源IP代理池--IPProxys

    今天博客开始继续更新,谢谢大家对我的关注和支持.这几天一直是在写一个ip代理池的开源项目.通过前几篇的博客,我们可以了解到突破反爬虫机制的一个重要举措就是代理ip.拥有庞大稳定的ip代理,在爬虫工作中 ...

  6. python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)

    在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...

  7. python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会

    我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...

  8. python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫

    用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...

  9. Scrapy加Redis加IP代理池实现音乐爬虫

    音乐爬虫 关注公众号"轻松学编程"了解更多. 目的:爬取歌名,歌手,歌词,歌曲url. 一.创建爬虫项目 创建一个文件夹,进入文件夹,打开cmd窗口,输入: scrapy star ...

随机推荐

  1. HttpRuntime.Cache .Net自带的缓存类

    .Net自带的缓存有两个,一个是Asp.Net的缓存 HttpContext.Cache,一个是.Net应用程序级别的缓存,HttpRuntime.Cache. MSDN上有解释说: HttpCont ...

  2. android开发文章收藏

    1.activity [Android的从零单排开发日记]之入门篇(四)——Android四大组件之Activity 两分钟彻底让你明白Android Activity生命周期(图文)! 2.serv ...

  3. 自学Aruba之路

    自学Aruba之路[第一回]:体系结构    1.1 自学Aruba1.1-Aruba体系结构-产品线    1.2 自学Aruba1.2-WLAN一些基本常识    1.3 自学Aruba1.3-W ...

  4. 深入理解ES6之—符号与符号属性

    在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:==符号(Symbol)==.符号起初被设计用于创建对象私有成员. 符号没有字面量形式,你 ...

  5. 关于对JavaScript待于完善的一些知识点

    学习JavaScript也存在一段时间,以下是个人对JavaScript中抽象的知识点记录备案,将有待于后面逐个完善...... 1.JavaScript在内存中的体现(内存中栈堆与基本类型及引用类型 ...

  6. mysql安装及常见使用

    mysql的安装和使用 说明:mysql是一个多线程,多用户的sql数据库,有着高性能,高可靠性,易于实用性等特点. 安装的软件链接:https://pan.baidu.com/s/1smRLkoX ...

  7. SPRINGCLOUD 开发学习记录

    一个简单的微服务系统:服务注册和发现,服务消费,负载均衡,断路器,智能路由,配置管理 服务注册中心: eureka是一个高可用组件,没有后端缓存,每一个实例注册后向注册中心发送心跳,默认情况下,eru ...

  8. UVA 11292 Dragon of Loowater(简单贪心)

    Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...

  9. Codeforces 839D Winter is here【数学:容斥原理】

    D. Winter is here time limit per test:3 seconds memory limit per test:256 megabytes input:standard i ...

  10. BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4813  Solved: 2877[Submit][Stat ...