python爬虫redis-ip代理池搭建几十万的ip数据--可以使用
from bs4 import BeautifulSoup
import requests,os,sys,time,random,redis
from lxml import etree
conn = redis.Redis(host='127.0.0.1',port=6379,db=0,decode_responses=True)
def get_ip(page_url,headers,cookies,sui_ji_time):
"""
爬取ip并组合ip使用的格式
:param page_url:
:param headers:
:param cookies:
:param sui_ji_time:
:return:
"""
try: print('{}--{}--{}--{}>>{}'.format('此程序睡眠时间',sui_ji_time,'正在爬取第',page_url,'的数据'))
response = requests.get(page_url,headers=headers,cookies=cookies).text
json_lxml = etree.HTML(response)
table = json_lxml.xpath('//*[@id="list"]/table/tbody/tr')
for i in table:
html_ip = i.xpath('.//td[1]/text()')[0]
html_ip_port = i.xpath('.//td[2]/text()')[0]
html_ip_lei = i.xpath('.//td[4]/text()')[0]
daili_ip = '{}{}:{}'.format('http://', html_ip, html_ip_port)
if html_ip_lei == 'HTTP':
ceshi_ip(headers,cookies,sui_ji_time,daili_ip,html_ip_lei)
else:
ceshi_ip(headers,cookies,sui_ji_time,daili_ip,html_ip_lei)
except: print('{}--{}--{}--{}>>{}'.format('此程序睡眠时间', sui_ji_time, '正在爬取第', page_url, '的数据=========失败')) def ceshi_ip(headers,cookies,sui_ji_time,daili_ip,html_ip_lei):
"""
测试爬取下来的ip是否可用
:param headers:
:param cookies:
:param sui_ji_time:
:param daili_ip:
:param html_ip_lei:
:return:
"""
print(daili_ip,'@@@@@@@@@@@@')
# list1 = []
try:
requests.get('http://wenshu.court.gov.cn/', proxies={str(html_ip_lei): daili_ip})
except:
print('{}>>{}'.format(daili_ip,'不可用'))
else:
print('{}>>{}'.format(daili_ip,'可用'))
"""
存储redis数据库
"""
try:
conn.sadd('proxy','{}+{}'.format(html_ip_lei,daili_ip))
print('{}'.format('存储redis成功'))
except:
print('{}'.format('存储redis失败'))
root_dir = '{}'.format('D:\\web_xiangmu\\biquge_tushu\\代理')
# list1.append({str(html_ip_lei): str(daili_ip)})
if not os.path.exists(root_dir):
os.mkdir(root_dir)
print('{}'.format('创建成功'))
# print('{}'.format('文件存在'))
"""
存储文件以防丢失
"""
try:
with open(root_dir+'\\'+'daili.text', "a+") as mon:
mon.write('{}+{}\n'.format(html_ip_lei,daili_ip))
print('{}>>>{}'.format(daili_ip,'写入成功'))
except:
print('{}'.format('写入失败')) def main():
"""
爬取ip代理网站的全部ip
并组合分页
:return:
""" url = 'https://www.kuaidaili.com/free/inha/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
'Referer': 'https://www.kuaidaili.com/free/inha/',
}
cookies = {
'Cookie': 'channelid=0; sid=1575640807483263; _ga=GA1.2.757045199.1575642271; _gid=GA1.2.1903168241.1575642271; _gat=1; Hm_lvt_7ed65b1cc4b810e9fd37959c9bb51b31=1575642272,1575686420; Hm_lpvt_7ed65b1cc4b810e9fd37959c9bb51b31=1575686420',
}
try:
response = requests.get(url,headers=headers,cookies=cookies).text
json_lxml = etree.HTML(response)
ip_page = json_lxml.xpath('//ul/li[9]/a/text()')[0]
ip_page_href = json_lxml.xpath('//ul/li[9]/a/@href')[0]
sui_ji_time = random.choice(list_time_sleep)
for page in range(1,int(ip_page)+1):
page_url = '{}/{}/{}/{}'.format('https://www.kuaidaili.com',''.join(ip_page_href).split('/')[1],''.join(ip_page_href).split('/')[2],page)
time.sleep(sui_ji_time)
get_ip(page_url,headers,cookies,sui_ji_time)
except:
print('程序崩溃') if __name__ == '__main__':
list_time_sleep = [5,10,15]
zhu_sui_ji_time = random.choice(list_time_sleep)
print('{}<<{}>>{}'.format('主程序随机睡眠时间',zhu_sui_ji_time,'秒'))
time.sleep(zhu_sui_ji_time)
main() """
import redis,requests
conn = redis.Redis(host='127.0.0.1',port=6379,db=0,decode_responses=True)
ip = conn.srandmember('proxy')
ip_add = ''.join(ip).split('+')
zhen_ip = ip_add
dict1 = {}
# # 使用IP代理访问百度,测试代理地址是否有效
try:
requests.get('http://wenshu.court.gov.cn/', proxies={zhen_ip[0]: zhen_ip[1]})
print('{}---{}>>>{}'.format(zhen_ip[0],zhen_ip[1],'可用'))
except:
#删除没用的ip
conn.srem('proxy',zhen_ip[1] )
print('{}---{}>>>{}'.format(zhen_ip[0], zhen_ip[1], '不可用'))
dict1 = {zhen_ip[0]:zhen_ip[1]}} print(dict1) #<<<proxies=dict1>>>在请求头部添加这个参数就可以正常使用了
"""
python爬虫redis-ip代理池搭建几十万的ip数据--可以使用的更多相关文章
- 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫
前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...
- 反爬虫之搭建IP代理池
反爬虫之搭建IP代理池 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部.可惜加了header请求头,加了cookie 还是被限制爬取了.这时就得祭出IP代理池!!! 下面就是requ ...
- python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...
- 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池
前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...
- Python爬虫之ip代理池
可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一. 对于封IP的网站.需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了 ...
- python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)
在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- 静听网+python爬虫+多线程+多进程+构建IP代理池
目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip ...
- Scrapy加Redis加IP代理池实现音乐爬虫
音乐爬虫 关注公众号"轻松学编程"了解更多. 目的:爬取歌名,歌手,歌词,歌曲url. 一.创建爬虫项目 创建一个文件夹,进入文件夹,打开cmd窗口,输入: scrapy star ...
随机推荐
- pytorch-Alexnet 网络
Alexnet网络结构, 相比于LeNet,Alexnet加入了激活层Relu, 以及dropout层 第一层网络结构: 11x11x3x96, 步长为4, padding=2 第二层网络结构: 5x ...
- spring clound gateway 上传文件,中文文件名乱码解决办法
先说解决办法吧: 有三种解决办法 1 ,zuul官方给出了解决方案,使用/zuul开头的请求可以避免中文名乱码以及支持大文件上传 域名是 testgateway.com 接口是 api/image ...
- dts是如何来描述iommu与PCI(e)之间的关系?
1. 在一颗树的根下每个PCI(e)设备被它的请求id(AKA RID)独一无二的标识,一个请求ID由三部分组成,总线号,设备号和功能号,如: Bits [15:8] 是总线号 Bits [7:3]是 ...
- Linux下 安装jdk8
一.文件准备 1.1 文件名称 jdk-8u121-linux-x64.tar.gz 1.2 下载地址 http://www.oracle.com/technetwork/java/javase/do ...
- <javaScript>谈谈JavaScript中的变量、指针和引用
1.变量我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢?事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a.变量a的值实际上描述的是这组存储单元中 ...
- PHP拼多多模式,砍价免费拿商品算法
我12年开始做网站,对拼多多关注两三年了,一直对他们的拉新模式很感兴趣,下面我对砍价送礼品的算法跟大家分享下. 拼多多砍价免费拿商品有几个核心的东西: 1.需要拉新多人给商品,这个是直接在数据库配 ...
- SDTP协议
转载于 http://blog.csdn.net/fan_hai_ping/article/details/11797449 SDTP协议细则
- Callable和Supplier的区别
A Callable is "A task that returns a result, while a Supplier is "a supplier of results&qu ...
- 分布式存储ceph部署(2)
一.部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用: 1台部署节点(配一块硬盘,运行ceph-depo ...
- MATLAB学习(四)线性方程求解,多项式运算,函数局部最优解
>> A=[2 1 3;1 3 2];B=[5;10] B = 5 10 >> X=lsqnonneg(A,B) X = 0 2.8571 0.7143 >> A\ ...