利用Flask写了一个代理IP提取接口,并附上电影下载站点刷分程序用于测试代理IP可用性

15 篇文章 0 订阅
2 篇文章 0 订阅

热烈庆祝失踪人口回归

2019-06-17 新增可以指定目标站点维护的一个代理池,而非通用的代理IP

代理IP获取接口

  • 接口地址:http://api.faceme.site/proxy/common

  • 请求方法:GET

  • 接口参数:

    • limit 单次代理IP提取数量,默认提取全部,int类型

    • scheme 代理方式 httphttps,默认不限

    • oversea 境内代理0或境外代理1,默认不限

    • type 返回文本格式,jsonlines,默认以json形式返回

返回数据示例

  • http://api.faceme.site/proxy/common?limit=3&scheme=http&oversea=0
{
    "code": 200,
    "data": [
        {
            "anonymous": false,
            "area": "中国四川成都",
            "collect_timestamp": 1561300658,
            "host": "116.196.90.181",
            "oversea": 0,
            "port": "3128",
            "scheme": "http",
            "verify_timestamp": 1561304043
        },
        {
            "anonymous": true,
            "area": "CN",
            "collect_timestamp": 1561299404,
            "host": "124.202.166.171",
            "oversea": 0,
            "port": 82,
            "scheme": "http",
            "verify_timestamp": 1561304082
        },
        {
            "anonymous": true,
            "area": "CN",
            "collect_timestamp": 1561299404,
            "host": "113.107.5.100",
            "oversea": 0,
            "port": 8080,
            "scheme": "http",
            "verify_timestamp": 1561304081
        }
    ],
    "message": "本次提取代理IP 3 个"
}

代理IP来源与验证

  • 代理IP来源
    • 西刺代理免费代理IP
    • 89代理免费代理IP
    • 无忧代理免费代理IP
    • 66IP代理免费代理IP
    • Fate0开源代理IP
    • 米扑付费代理IP
  • 代理IP验证
    • 境内代理IP验证站点:2019.ip138.com/ic.asp
    • 境外代理IP验证站点:httpbin.org/ip
    • 验证通过条件
      • 设置代理IP后能正常访问目标站点
      • 访问目标站点延迟不超过3s
      • 单个代理IP每5min进行一次验证
    • 验证方式不严谨,通过以上站点验证通过的代理IP也不能确保能正常访问另外的站点

代理IP测试站点—Hao6v电影下载网刷评分

  • hao6v.com站点经DNS查询,主机地址为Los Angeles, California, United States,是境外主机,则选用境外代理IP用于测试
  • 本代理池代理IP测试结论:代理IP可用率超过90%
  • 附上测试代码,Hao6v站点刷电影评分程序
# -*- coding: utf-8 -*-
# @Author : Leo

import sys
import logging
import requests
from bs4 import BeautifulSoup
from urllib.parse import parse_qs, urlparse

logging.basicConfig(level=logging.INFO,  # 最低输出
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%d %b %H:%M:%S')


class Hao6vScore:
    """
    hao6v站点刷票
    """

    def __init__(self, movie_url):
        self.movie_url = movie_url

        self.base_headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
        # 提交评分的接口
        self.submit_score_url = 'http://www.hao6v.com/e/enews/'
        # 提交评分需要的参数
        self.score_params = {'enews': 'AddInfoPfen', 'classid': '', 'id': '',
                             'doajax': 1, 'ajaxarea': 'showpf', 'fen': 0}
        self._init_score_info()

    def submit_one_score(self, score, proxy):
        """
        利用代理IP提交一次评分
        :param score:
        :param proxy:
        :return:
        """
        if all([self.score_params.get('classid'), self.score_params.get('id')]):
            self.score_params['fen'] = score
            try:
                score_resp = requests.get(url=self.submit_score_url, params=self.score_params,
                                          headers=self.base_headers, proxies=proxy)
                logging.info('点赞成功,当前评分: %s,使用代理IP: %s' % (score_resp.text.split('|')[0], proxy))
            except requests.exceptions.RequestException as err:
                logging.info('点赞失败,失败原因: %s' % err)
        else:
            raise ValueError('未获取到classid或id参数,无法点赞')

    def _init_score_info(self):
        """
        获取点赞信息
        :return:
        """
        try:
            resp = requests.get(url=self.movie_url, headers=self.base_headers)
            if resp.status_code == 200:
                soup = BeautifulSoup(resp.text, 'html.parser')
                iframe_tag = soup.find('iframe', {'id': 'ifc', 'src': True})
                if iframe_tag is not None:
                    classid_id_url = iframe_tag.get('src')
                    parse_result = parse_qs(urlparse(url=classid_id_url).query)
                    self.score_params['classid'] = parse_result.get('classid')[0] \
                        if parse_result.get('classid') is not None else ''
                    self.score_params['id'] = parse_result.get('id')[0] \
                        if parse_result.get('id') is not None else ''
        except requests.exceptions.RequestException:
            pass


def get_proxy(limit=20, oversea=0, scheme=None):
    """
    获取代理IP
    :param limit: 提取代理IP数量
    :param oversea: 是否境外IP,0境内,1境外
    :param scheme: 代理方式
    :return:
    """
    target_proxy_list = None
    # 代理IP获取接口
    proxy_url = 'http://api.faceme.site/proxy/'
    proxy_params = {'limit': limit,
                    'oversea': oversea,
                    'scheme': scheme}
    proxy_resp = requests.get(url=proxy_url, params=proxy_params)
    if proxy_resp.status_code == 200 and proxy_resp.json().get('code') == 200:
        target_proxy_list = [{'http:': 'http://' + item.get('proxy'),
                              'https': 'https://' + item.get('proxy')} for item in proxy_resp.json().get('data')]
    return target_proxy_list


if __name__ == '__main__':
    # 用于测试的hao6v站点《纯洁心灵-逐梦演艺圈》影片链接
    test_movie_url = 'http://www.hao6v.com/gq/2018-08-09/CJXLZMYYQ.html'
    scorer = Hao6vScore(movie_url=test_movie_url)
    while True:
        # 每次提取10个代理IP,选用境外代理,代理方式为http
        proxy_list = get_proxy(limit=10, oversea=1, scheme='http')
        try:
            for each_proxy in proxy_list:
                scorer.submit_one_score(score=5, proxy=each_proxy)
        except ValueError:
            sys.exit(0)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值