什么是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. Spring_Spring与AOP

    一.传统编程使用代理解决目标类增强问题 //主业务接口 public interface ISomeService { // 目标方法 void doFirst(); // 目标方法 void doS ...

  2. Javascript中遍历数组方法的性能对比

    Javascript中常见的遍历数组的方法 1.for循环 for(var i = 0; i < arr.length; i++) { // do something. } 2.for循环的改进 ...

  3. JSP动态产生的代码,点击显示确认操作,根据操作跳转并传值。

    假如有如下一段代码产生了多个选项我们改如何获得点击删除一项中的值? <%List<Theme> themelist=(List<Theme>)request.getAtt ...

  4. 如何处理Cookie存储和读取中文乱码问题

    存储Cookie for(String str:books){ str=new String(str.getBytes("ISO-8859-1"),"utf-8" ...

  5. 【SSD,FIO,SAS选择的一些小结】SSD,FIO,SAS选择的一些小结

    最近重新摊上了数据库,公司核心数据库天天 IO爆满,在研究用SAS 16*RAID10 ,还是RAID10 SSD*6, 还是FIO:no.1 principle, no raid-5 for dat ...

  6. JMeter-自动生成测试报告

    很多朋友都在问jmeter如何生成测试报告,这里随便说两句. 环境要求 1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚本文件 基本操作 1:在你的脚 ...

  7. C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了.这章正如我标题所写的,是C语言在文件上的操作.学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的 ...

  8. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (2)

    Github源码地址是: https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scra ...

  9. Scala之String

    一.前言 大数据领域的Spark.Kafka.Summingbird等都是由Scala语言编写而成,相比Java而言,Scala更精炼.由于笔者从事大数据相关的工作,所以有必要好好学习Scala语言, ...

  10. CSS清除浮动的几种方式

    浮动对页面的影响: 如果一个父盒子中有一个子盒子,并且父盒子没有设置高,子盒子在父盒子中进行了浮动,那么将来父盒子的高度为0.由于父盒子的高度为0, 下面的元素会自动补位,所以这个时候要进行浮动的清除 ...