scrapy_随机ip代理池
什么是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代理池的更多相关文章
- 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫
前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...
- python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...
- 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池
前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...
- 爬取西刺ip代理池
好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...
- python开源IP代理池--IPProxys
今天博客开始继续更新,谢谢大家对我的关注和支持.这几天一直是在写一个ip代理池的开源项目.通过前几篇的博客,我们可以了解到突破反爬虫机制的一个重要举措就是代理ip.拥有庞大稳定的ip代理,在爬虫工作中 ...
- python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)
在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...
- python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- Scrapy加Redis加IP代理池实现音乐爬虫
音乐爬虫 关注公众号"轻松学编程"了解更多. 目的:爬取歌名,歌手,歌词,歌曲url. 一.创建爬虫项目 创建一个文件夹,进入文件夹,打开cmd窗口,输入: scrapy star ...
随机推荐
- HttpRuntime.Cache .Net自带的缓存类
.Net自带的缓存有两个,一个是Asp.Net的缓存 HttpContext.Cache,一个是.Net应用程序级别的缓存,HttpRuntime.Cache. MSDN上有解释说: HttpCont ...
- android开发文章收藏
1.activity [Android的从零单排开发日记]之入门篇(四)——Android四大组件之Activity 两分钟彻底让你明白Android Activity生命周期(图文)! 2.serv ...
- 自学Aruba之路
自学Aruba之路[第一回]:体系结构 1.1 自学Aruba1.1-Aruba体系结构-产品线 1.2 自学Aruba1.2-WLAN一些基本常识 1.3 自学Aruba1.3-W ...
- 深入理解ES6之—符号与符号属性
在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:==符号(Symbol)==.符号起初被设计用于创建对象私有成员. 符号没有字面量形式,你 ...
- 关于对JavaScript待于完善的一些知识点
学习JavaScript也存在一段时间,以下是个人对JavaScript中抽象的知识点记录备案,将有待于后面逐个完善...... 1.JavaScript在内存中的体现(内存中栈堆与基本类型及引用类型 ...
- mysql安装及常见使用
mysql的安装和使用 说明:mysql是一个多线程,多用户的sql数据库,有着高性能,高可靠性,易于实用性等特点. 安装的软件链接:https://pan.baidu.com/s/1smRLkoX ...
- SPRINGCLOUD 开发学习记录
一个简单的微服务系统:服务注册和发现,服务消费,负载均衡,断路器,智能路由,配置管理 服务注册中心: eureka是一个高可用组件,没有后端缓存,每一个实例注册后向注册中心发送心跳,默认情况下,eru ...
- UVA 11292 Dragon of Loowater(简单贪心)
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...
- Codeforces 839D Winter is here【数学:容斥原理】
D. Winter is here time limit per test:3 seconds memory limit per test:256 megabytes input:standard i ...
- BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 4813 Solved: 2877[Submit][Stat ...