爬取免费代理ip,定时检测,并部署到django上,方便获取,外部调用django模型类时需要注意下
代理ip池早就写好了,之前是在flask上部署的,代码早就丢在一块没管了,这次就想着把他找出来放到django页面上,于是乎这个清明就干了这事。
代码是之前学爬虫跟着写的,所以说还比较熟悉,由于一些代理网站进不去了,爬取规则做了些改动,然后把redis也升级到了redis3,用法与redis2有些不同,顺便把数据转存到mysql,方便django管理,对以后迁移可能也会方便一些,下面开始复制粘贴
新建应用
python manage.py startapp proxypool
添加模型类(http和https还没实现,由于aiohttp不支持https代理)
class ProxyPool(models.Model):
proxy = models.CharField(max_length=23, default='')
http = models.BooleanField(verbose_name='是否支持http代理', default=False)
https = models.BooleanField(verbose_name='是否支持https代理', default=False)
score = models.SmallIntegerField(verbose_name='分数', default=100)
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
is_exsist = models.BooleanField(default=True, verbose_name='是否存在')
随便写两个视图函数
from django.shortcuts import render
from proxypool.proxy.db import RedisClient
from django.http import JsonResponse
from .models import ProxyPool
from random import sample
# Create your views here.
redis_proxy = RedisClient()
def proxy(request):
ip_count = redis_proxy.count()
ip_enable = redis_proxy.count_able()
return render(request, 'proxy.html', {'ip_count': ip_count, 'ip_enable': ip_enable})
def proxy_get(request):
proxys = redis_proxy.random()
return JsonResponse({'proxy': proxys})
def proxy_get_many(request, count=10):
# 获取多个默认从mysql数据库中拿
# 只获取100分的代理ip
pool = ProxyPool.objects.filter(score=100).order_by('-update_time')
ret = {}
if len(pool) >