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 ...
随机推荐
- python matplotlib 绘图基础
在利用Python做数据分析时,探索数据以及结果展现上图表的应用是不可或缺的. 在Python中通常情况下都是用matplotlib模块进行图表制作. 先理下,matplotlib的结构原理: mat ...
- [转]在Mac系统中安装配置Tomcat及和Eclipse 配置
第一步:下载Tomcat 下载地址:http://tomcat.apache.org/download-70.cgi 直接下载如下选中即可: 第二步: 下载完成后 ,把解压的文件夹放到一个目录下 ...
- 常用Linux命令笔记
任何脱离业务的架构都是耍流氓 只记录实际常用的Linux命令 常用Linux命令 查找安装路径: whereis nginx 查询nginx进程: ps aux|grep nginx 查看 CentO ...
- Linux下SVN提交时强制写日志
Linux版本: 1.在svn的hooks目录下新建一个名为pre-commit的文件并为其添加执行权限(用vi pre-commit直接创建) 2.pre-commit文件的内容如下: #!/bin ...
- Linux centos7系统下svn的安装与配置
一.安装svn # yum -y install svn 二.查看svn版本信息 # svnserve --version 三.搭建svn版本库(假设项目名称为project) 1.首先创建版本库目录 ...
- DAY6-小变化(java提示框)-2018-1-16
终于有一点点小变化了,今天学习了java里的对话框,有四种类型:1.确认对话框(showConfirmDialog) 2.可选择输入的对话框(showInputDialog) 3.信息对话框(show ...
- 带新手走进神秘的HTTP协议
在开发的时候经常需要访问网络,比如Android就有好多这方面的框架:Volley.OkHttp.Retrofit等,当你看这些框架源码时,可能会很好奇关于http的部分,它的首部字段是什么意思,ht ...
- spring的父子容器
在创建ssm项目工程时,经常需要读取properties资源配置文件,传统的方法当然可以. 但是spring提供了更简便的方法,@value注解. 在page.properties文件中,配置分页信息 ...
- Sampling
本文主要涉及接受拒绝采样,重要性采样,蒙特卡洛方法,吉布斯采样等内容.部分内容整理与互联网.仅供交流学习使用!
- python的while循环
age_of_laochuanzhang = 56 conut = 0 while True: if conut == 3: print("输入次数上限") break age = ...