获取代理服务器ip列表的方法

 

开源项目:https://github.com/SpiderClub/haipproxy,看爬代理的网址列表应该是最多的。

CRAWLER_TASKS = [
    {
        'name': 'mogumiao.com',
        'resource': ['http://www.mogumiao.com/proxy/free/listFreeIp',
                     'http://www.mogumiao.com/proxy/api/freeIp?count=15'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'json',
        'parse_rule': {
            'detail_rule': ['msg'],
            'ip_key': 'ip',
            'port_key': 'port',
        },
        'interval': 5,
        'enable': 1,
    },
    {
        # now we can't get proxies from it,but it required by ip181
        'name': 'xdaili.cn',
        'resource': ['http://www.xdaili.cn:80/ipagent/freeip/getFreeIps?page=1&rows=10'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'json',
        'parse_rule': {
            'detail_rule': ['RESULT'],
            'ip_key': 'ip',
            'port_key': 'port',
        },
        'interval': 10,
        'enable': 0,
    },
    {
        'name': 'xicidaili.com',
        'resource': ['http://www.xicidaili.com/nn/%s' % i for i in range(1, 6)] +
                    ['http://www.xicidaili.com/wn/%s' % i for i in range(1, 6)] +
                    ['http://www.xicidaili.com/wt/%s' % i for i in range(1, 6)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1
    },
    {
        'name': 'kuaidaili.com',
        'resource': ['https://www.kuaidaili.com/free/inha/%s' % i for i in range(1, 6)] +
                    ['https://www.kuaidaili.com/proxylist/%s' % i for i in range(1, 11)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 4,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1
    },
    {
        'name': 'kxdaili.com',
        'resource': [
            'http://www.kxdaili.com/dailiip/%s/%s.html#ip' % (i, j) for i in range(1, 3) for j in range(1, 11)
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1
    },
    {
        'name': 'mrhinkydink.com',
        'resource': ['http://www.mrhinkydink.com/proxies.htm'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'css',
            'pre_extract': '.text',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 2 * 60,
        'enable': 1,
    },
    {
        'name': 'nianshao.me',
        'resource': ['http://www.nianshao.me/?stype=1&page=%s' % i for i in range(1, 11)] +
                    ['http://www.nianshao.me/?stype=2&page=%s' % i for i in range(1, 11)] +
                    ['http://www.nianshao.me/?stype=5&page=%s' % i for i in range(1, 11)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1  # it seems the website is down
    },
    {
        'name': '66ip.cn',
        'resource': ['http://www.66ip.cn/%s.html' % i for i in range(1, 3)] +
                    ['http://www.66ip.cn/areaindex_%s/%s.html' % (i, j)
                     for i in range(1, 35) for j in range(1, 3)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 4,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 2 * 60,
        'enable': 1
    },
    {
        'name': 'baizhongsou.com',
        'resource': ['http://ip.baizhongsou.com/'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': True,
            'protocols': None
        },
        'interval': 30,
        'enable': 1
    },
    {
        'name': 'data5u.com',
        'resource': [
            'http://www.data5u.com/free/index.shtml',
            'http://www.data5u.com/free/gngn/index.shtml',
            'http://www.data5u.com/free/gwgn/index.shtml'
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//ul[contains(@class, "l2")]',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'span li::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 10,
        'enable': 1,
    },
    {
        # can not access
        'name': 'httpsdaili.com',
        'resource': ['http://www.httpsdaili.com/?stype=1&page=%s' % i for i in range(1, 8)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr[contains(@class, "odd")]',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 3 * 60,
        'enable': 0,
    },
    {
        'name': 'ip181.com',
        'resource': ['http://www.ip181.com/'] +
                    ['http://www.ip181.com/daili/%s.html' % i for i in range(1, 20)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 10,
        'enable': 1,
    },
    {
        'name': 'ip3366.net',
        'resource': ['http://www.ip3366.net/free/?stype=1&page=%s' % i for i in range(1, 3)] +
                    ['http://www.ip3366.net/free/?stype=3&page=%s' % i for i in range(1, 3)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 30,
        'enable': 1
    },
    {
        'name': 'iphai.com',
        'resource': [
            'http://www.iphai.com/free/ng',
            'http://www.iphai.com/free/wg',
            'http://www.iphai.com/free/np',
            'http://www.iphai.com/free/wp',
            'http://www.iphai.com/'
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'swei360.com',
        'resource': ['http://www.swei360.com/free/?page=%s' % i for i in range(1, 4)] +
                    ['http://www.swei360.com/free/?stype=3&page=%s' % i for i in range(1, 4)],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 30,
        'enable': 1,
    },
    {
        'name': 'yundaili.com',
        'resource': [
            'http://www.yun-daili.com/free.asp?stype=1',
            'http://www.yun-daili.com/free.asp?stype=2',
            'http://www.yun-daili.com/free.asp?stype=3',
            'http://www.yun-daili.com/free.asp?stype=4',
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr[contains(@class, "odd")]',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 6 * 60,
        'enable': 1,
    },
    {
        'name': 'ab57.ru',
        'resource': ['http://ab57.ru/downloads/proxyold.txt'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'text',
        'parse_rule': {
            'pre_extract': None,
            'delimiter': '\r\n',
            'redundancy': None,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'proxylists.net',
        'resource': ['http://www.proxylists.net/http_highanon.txt'],
        'parse_type': 'text',
        'task_queue': SPIDER_COMMON_TASK,
        'parse_rule': {
            'pre_extract': None,
            'delimiter': '\r\n',
            'redundancy': None,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'my-proxy.com',
        'resource': [
            'https://www.my-proxy.com/free-elite-proxy.html',
            'https://www.my-proxy.com/free-anonymous-proxy.html',
            'https://www.my-proxy.com/free-socks-4-proxy.html',
            'https://www.my-proxy.com/free-socks-5-proxy.html'
        ],
        'task_queue': SPIDER_COMMON_TASK,
        # if the parse method is specified, set it in the Spider's parser_maps
        'parse_type': 'myproxy',
        'interval': 60,
        'enable': 1,
    },

    {
        'name': 'us-proxy.org',
        'resource': ['https://www.us-proxy.org/'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tbody//tr',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'socks-proxy.net',
        'resource': [
            'https://www.socks-proxy.net/',
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tbody//tr',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'sslproxies.org/',
        'resource': ['https://www.sslproxies.org/'],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tbody//tr',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'atomintersoft.com',
        'resource': [
            'http://www.atomintersoft.com/high_anonymity_elite_proxy_list',
            'http://www.atomintersoft.com/anonymous_proxy_list',
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': True,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'rmccurdy.com',
        'resource': [
            'https://www.rmccurdy.com/scripts/proxy/good.txt'
        ],
        'task_queue': SPIDER_COMMON_TASK,
        'parse_type': 'text',
        'parse_rule': {
            'pre_extract': None,
            'delimiter': '\n',
            'redundancy': None,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        # there are some problems using crawlspider, so we use basic spider
        'name': 'coderbusy.com',
        'resource': ['https://proxy.coderbusy.com/'] +
                    ['https://proxy.coderbusy.com/classical/https-ready.aspx?page=%s' % i for i in range(1, 21)] +
                    ['https://proxy.coderbusy.com/classical/post-ready.aspx?page=%s' % i for i in range(1, 21)] +
                    ['https://proxy.coderbusy.com/classical/anonymous-type/anonymous.aspx?page=%s'
                     % i for i in range(1, 6)] +
                    ['https://proxy.coderbusy.com/classical/anonymous-type/highanonymous.aspx?page=%s'
                     % i for i in range(1, 6)] +
                    ['https://proxy.coderbusy.com/classical/country/cn.aspx?page=%s' % i for i in range(1, 21)] +
                    ['https://proxy.coderbusy.com/classical/country/us.aspx?page=%s' % i for i in range(1, 11)] +
                    ['https://proxy.coderbusy.com/classical/country/id.aspx?page=%s' % i for i in range(1, 6)] +
                    ['https://proxy.coderbusy.com/classical/country/ru.aspx?page=%s' % i for i in range(1, 6)],
        'task_queue': SPIDER_AJAX_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 1,
            'port_pos': 2,
            'extract_protocol': False,
            'split_detail': False,
            'protocols': None
        },
        'interval': 2 * 60,
        'enable': 1,
    },
    {
        'name': 'proxydb.net',
        'resource': ['http://proxydb.net/?offset=%s' % (15 * i) for i in range(20)],
        'task_queue': SPIDER_AJAX_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'detail_rule': 'a::text',
            'split_detail': True,
        },
        'interval': 3 * 60,
        'enable': 1,
    },
    {
        'name': 'cool-proxy.net',
        'resource': ['https://www.cool-proxy.net/proxies/http_proxy_list/country_code:/port:/anonymous:1/page:%s'
                     % i for i in range(1, 11)],
        'task_queue': SPIDER_AJAX_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': -1,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 30,
        'enable': 1,
    },
    {
        'name': 'goubanjia.com',
        'resource': ['http://www.goubanjia.com/'],
        'task_queue': SPIDER_AJAX_TASK,
        'parse_type': 'goubanjia',
        'interval': 10,
        'enable': 1,
    },
    {
        'name': 'cn-proxy.com',
        'resource': [
            'http://cn-proxy.com/',
            'http://cn-proxy.com/archives/218'
        ],
        'task_queue': SPIDER_GFW_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tbody//tr',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'free-proxy-list.net',
        'resource': [
            'https://free-proxy-list.net/',
            'https://free-proxy-list.net/uk-proxy.html',
            'https://free-proxy-list.net/anonymous-proxy.html',
        ],
        'task_queue': SPIDER_GFW_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tbody//tr',
            'infos_pos': 0,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'xroxy',
        'resource': ['http://www.xroxy.com/proxylist.php?port=&type=&ssl=&country=&latency=&reliability=&'
                     'sort=reliability&desc=true&pnum=%s#table' % i for i in range(20)],
        'task_queue': SPIDER_GFW_TASK,
        'parse_type': 'xroxy',
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'proxylistplus',
        'resource': [
            'http://list.proxylistplus.com/Fresh-HTTP-Proxy-List-1',
            'http://list.proxylistplus.com/SSL-List-1'
        ],
        'task_queue': SPIDER_GFW_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr[contains(@class, "cells")]',
            'infos_pos': 1,
            'infos_end': -1,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': False,
            'split_detail': False,
            'protocols': None
        },
        'interval': 3 * 60,
        'enable': 1,
    },
    {
        'name': 'cnproxy.com',
        'resource': ['http://www.cnproxy.com/proxy%s.html' % i for i in range(1, 11)] +
                    ['http://www.cnproxy.com/proxyedu%s.html' % i for i in range(1, 3)],
        'task_queue': SPIDER_AJAX_GFW_TASK,
        'parse_type': 'cnproxy',
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'free-proxy.cz',
        'resource': ['http://free-proxy.cz/en/proxylist/main/%s' % i for i in range(1, 30)],
        'task_queue': SPIDER_AJAX_GFW_TASK,
        'parse_type': 'free-proxy',
        'interval': 3 * 60,
        'enable': 1,
    },
    {
        'name': 'proxy-list.org',
        'resource': ['https://proxy-list.org/english/index.php?p=%s' % i for i in range(1, 11)],
        'task_queue': SPIDER_AJAX_GFW_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'css',
            'pre_extract': '.table ul',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'li::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': True,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
    {
        'name': 'gatherproxy',
        'resource': [
            'http://www.gatherproxy.com/',
            'http://www.gatherproxy.com/proxylist/anonymity/?t=Elite',
            'http://www.gatherproxy.com/proxylist/anonymity/?t=Anonymous',
            'http://www.gatherproxy.com/proxylist/country/?c=China',
            'http://www.gatherproxy.com/proxylist/country/?c=Brazil',
            'http://www.gatherproxy.com/proxylist/country/?c=Indonesia',
            'http://www.gatherproxy.com/proxylist/country/?c=Russia',
            'http://www.gatherproxy.com/proxylist/country/?c=United%20States',
            'http://www.gatherproxy.com/proxylist/country/?c=Thailand',
            'http://www.gatherproxy.com/proxylist/port/8080',
            'http://www.gatherproxy.com/proxylist/port/3128',
            'http://www.gatherproxy.com/proxylist/port/80',
            'http://www.gatherproxy.com/proxylist/port/8118'
        ],
        'task_queue': SPIDER_AJAX_GFW_TASK,
        'parse_type': 'common',
        'parse_rule': {
            'pre_extract_method': 'xpath',
            'pre_extract': '//tr',
            'infos_pos': 1,
            'infos_end': None,
            'detail_rule': 'td::text',
            'ip_pos': 0,
            'port_pos': 1,
            'extract_protocol': True,
            'split_detail': False,
            'protocols': None
        },
        'interval': 60,
        'enable': 1,
    },
]

# crawler will fetch tasks from the following queues
CRAWLER_TASK_MAPS = {
    'common': SPIDER_COMMON_TASK,
    'ajax': SPIDER_AJAX_TASK,
    'gfw': SPIDER_GFW_TASK,
    'ajax_gfw': SPIDER_AJAX_GFW_TASK
}

# validator scheduler will fetch tasks from resource queue and store into task queue
VALIDATOR_TASKS = [
    {
        'name': 'http',
        'task_queue': TEMP_HTTP_QUEUE,
        'resource': VALIDATED_HTTP_QUEUE,
        'interval': 5,  # 20 minutes
        'enable': 1,
    },
    {
        'name': 'https',
        'task_queue': TEMP_HTTPS_QUEUE,
        'resource': VALIDATED_HTTPS_QUEUE,
        'interval': 5,
        'enable': 1,
    },
    {
        'name': 'weibo',
        'task_queue': TEMP_WEIBO_QUEUE,
        'resource': VALIDATED_WEIBO_QUEUE,
        'interval': 5,
        'enable': 1,
    },
    {
        'name': 'zhihu',
        'task_queue': TEMP_ZHIHU_QUEUE,
        'resource': VALIDATED_ZHIHU_QUEUE,
        'interval': 5,
        'enable': 1,
    },
]

# validators will fetch proxies from the following queues
TEMP_TASK_MAPS = {
    'init': INIT_HTTP_QUEUE,
    'http': TEMP_HTTP_QUEUE,
    'https': TEMP_HTTPS_QUEUE,
    'weibo': TEMP_WEIBO_QUEUE,
    'zhihu': TEMP_ZHIHU_QUEUE
}

# target website that use http protocol
HTTP_TASKS = ['http']

# target website that use https protocol
HTTPS_TASKS = ['https', 'zhihu', 'weibo']

# todo the three maps may be combined in one map
# validator scheduler and clients will fetch proxies from the following queues
SCORE_MAPS = {
    'http': VALIDATED_HTTP_QUEUE,
    'https': VALIDATED_HTTPS_QUEUE,
    'weibo': VALIDATED_WEIBO_QUEUE,
    'zhihu': VALIDATED_ZHIHU_QUEUE
}

# validator scheduler and clients will fetch proxies from the following queues which are verified recently
TTL_MAPS = {
    'http': TTL_HTTP_QUEUE,
    'https': TTL_HTTPS_QUEUE,
    'weibo': TTL_WEIBO_QUEUE,
    'zhihu': TTL_ZHIHU_QUEUE
}

SPEED_MAPS = {
    'http': SPEED_HTTP_QUEUE,
    'https': SPEED_HTTPS_QUEUE,
    'weibo': SPEED_WEIBO_QUEUE,
    'zhihu': SPEED_ZHIHU_QUEUE
}

因为项目参考了Github上开源的各个爬虫代理的实现,参考了下面的项目:

dungproxy

proxyspider

ProxyPool

proxy_pool

ProxyPool

IPProxyTool

IPProxyPool

proxy_list

proxy_pool

ProxyPool

scylla

 

开源项目:https://github.com/TimoGroom/IPProxys

突破反爬虫的利器:开源IP代理池【转】

   

  突破反爬虫的一个常用做法是使用代理IP,可以是作为初学者或者个人来说,买一些代理ip成本稍微高一些,因此最近写了一个开源项目IPProxys,用来为个人提供代理ip。

  IPProxys原理:通过爬取各大代理网站提供的免费IP,进行去重,并验证ip的可用性,将有效的ip存储到sqlite中,并提供一个HTTP接口供爬虫程序获取ip。

  IPProxys项目已经上传到github中,链接为/qiyeboy/IPProxys。下面对整个项目工程进行一下说明,如下图所示:

  api包:主要是实现http服务器,提供api接口(通过get请求,返回json数据)

  data文件夹:主要是数据库文件的存储位置和qqwry.dat(可以查询换ip软件的地理位置)

  db包:主要是封装了一些数据库的操作

  spider包:主要是爬虫的核心功能,爬取代理网站上的代理ip

  test包:测试一些用例,不参与整个项目的运行

  util包:提供一些工具类。查询ip的地理位置

  validator包:用来测试ip地址是否可用

  :主要是配置信息(包括配置ip地址的解析方式和数据库的配置)

  整个项目的代码量不大,大家可以根据自己的需求进行修改,也可以提出自己的想法和建议帮助我改进这个项目。

  如何使用IPProxys项目呢?

  1.将项目目录clone到当前文件夹 $gitclone

  2.切换工程目录 $cdIPProxys

  3.运行脚本 windows上运行效果如下图所示:

  项目依赖项:

  需要安装sqlite数据库

  安装requests库:pipinstallrequests

  安装lxml:apt-getinstallpython-lxml

  当IPProxys运行起来后,外部的爬虫如何获取ip呢? 外部的爬虫只需要向IPProxys所在主机的8000端口发送GET请求即可。GET请求的参数为:

  访问http://127.0.0.1:8000/?types=0&count=5&country=中国这个链接的含义是获取5个ip地址在中国的高匿代理。

  响应为JSON格式,返回数据为:

  {"ip":"220.160.22.115","port":80},

  {"ip":"183.129.151.130","port":80},

  {"ip":"59.52.243.88","port":80},

  {"ip":"112.228.35.24","port":8888},

  {"ip":"106.75.176.4","port":80}

  一般爬取到的有效ip大约有60个左右,基本上满足个人的需要。

看了下源码,爬的服务器列表如下:

parserList = [
        {
            'urls': ['http://m.66ip.cn/%s.html'% n for n in ['index']+range(2,12)],
            'type':'xpath',
            'pattern': ".//*[@class='profit-c']/table/tr[position()>1]",
            'postion':{'ip':'./td[1]','port':'./td[2]','type':'./td[4]','protocol':''}
        },
        {
            'urls': ['http://m.66ip.cn/areaindex_%s/%s.html'%(m,n) for m in range(1,35) for n in range(1,10)],
            'type':'xpath',
            'pattern': ".//*[@id='footer']/div/table/tr[position()>1]",
            'postion':{'ip':'./td[1]','port':'./td[2]','type':'./td[4]','protocol':''}
        },
        {
            'urls': ['http://www.kuaidaili.com/proxylist/%s/'% n for n in range(1,11)],
            'type': 'xpath',
            'pattern': ".//*[@id='index_free_list']/table/tbody/tr[position()>0]",
            'postion':{'ip':'./td[1]','port':'./td[2]','type':'./td[3]','protocol':'./td[4]'}
        },
        {
            'urls': ['http://www.kuaidaili.com/free/%s/%s/'% (m,n) for m in ['inha', 'intr', 'outha', 'outtr'] for n in range(1,11)],
            'type':'xpath',
            'pattern': ".//*[@id='list']/table/tbody/tr[position()>0]",
            'postion':{'ip':'./td[1]','port':'./td[2]','type':'./td[3]','protocol':'./td[4]'}
        },
        {
            'urls': ['http://www.cz88.net/proxy/%s'% m for m in ['index.shtml']+['http_%s.shtml' % n for n in range(2, 11)]],
            'type':'xpath',
            'pattern':".//*[@id='boxright']/div/ul/li[position()>1]",
            'postion':{'ip':'./div[1]','port':'./div[2]','type':'./div[3]','protocol':''}

        },
        {
            'urls': ['http://www.ip181.com/daili/%s.html'% n for n in range(1, 11)],
            'type':'xpath',
            'pattern': ".//div[@class='row']/div[3]/table/tbody/tr[position()>1]",
            'postion':{'ip':'./td[1]','port':'./td[2]','type':'./td[3]','protocol':'./td[4]'}

        },
        {
            'urls': ['http://www.xicidaili.com/%s/%s'%(m,n) for m in ['nn', 'nt', 'wn', 'wt'] for n in range(1, 8) ],
            'type':'xpath',
            'pattern': ".//*[@id='ip_list']/tr[position()>1]",
            'postion':{'ip':'./td[2]','port':'./td[3]','type':'./td[5]','protocol':'./td[6]'}
        },
        {
            'urls':['http://www.cnproxy.com/proxy%s.html'% i for i in range(1,11)],
            'type':'module',
            'moduleName':'CnproxyPraser',
            'pattern':r'<tr><td>(\d+\.\d+\.\d+\.\d+)<SCRIPT type=text/javascript>document.write\(\"\:\"(.+)\)</SCRIPT></td><td>(HTTP|SOCKS4)\s*',
            'postion':{'ip':0,'port':1,'type':-1,'protocol':2}
        }
        ]

 

此外,https://www.baibianip.com/api/generatedymatic.html,有专门返回免费的ip代理列表,

什么是开放代理、私密代理、百变IP-Proxy、独享代理?有什么区别?

开放代理:是由全网扫描而来,就是别人搭建了代理服务器被我们扫到了拿来用,百变IP采用分布在全球各地的100台云服务器使用自行研发的扫描软件,借助于nmap工具+Lua,7*24*365不间断全网扫描、验证。开放代理的稳定性和速度等不如私密代理,对可靠性要求低的用户可以选择这个。

私密代理:非扫描而来的,而是百变IP租用中国各地资源,专门为客户搭建的代理通道,千万IP出口池,具有高匿、高速、稳定的特点。

独享代理:是私密代理的一种,只是当前服务器单独给指定的用户使用。

百变IP-Proxy:是私密代理的一种,是百变IP自主研发的一款分布式代理IP转发系统,统一入口,免提取,设置白名单即可使用,将请求智能转发到分布在全国各地的高匿代理服务器上,专为爬虫设计,超级方便。

。。。。

 

 

代理IP从哪找

 

由于开python培训有讲过爬虫的缘故,这个问题已经被ask无数次了,一般问的基友也都是爬虫防ban用的,那么在此,我把我个人尝试过的代理渠道都写一下。总体来讲,质量好的都不便宜,便宜的质量都比较渣,一分钱一分货

1)通过程序扫出来的代理

通过程序扫IP段、端口找出来的临时性代理。

诸如百度搜索“HTTP代理”,写着“每日更新”、“国内高匿免费”什么的都是这类,购买的话都很廉价。我用过的有:

西刺(免费代理IP_HTTP代理服务器IP_隐藏IP_QQ代理)

快代理(快代理 - 高速http代理ip每天更新)

站大爷

云代理(云代理 - 高速http代理ip每天更新)

......

基本都大同小异,没有哪个好那个坏,几个平台提供的代理至少有3成的重复率。

这类代理,有效期都不高,即便批量验证过在使用时还是会废掉一部分,可以应付低效率的采集、刷单次访问量,但是搞别的的还是算了吧

2)ADSL拨号服务器

ADSL拨号,断线重连切IP,淘宝有卖的,限定地区拨号、全国拨号都有。相对较稳定,至少比扫描出来的强很多,但切换IP耗时较长,需要几秒到1分钟之间。

所以如果采集是每访问一次切一次IP的话,效率会很慢,只能等当前IP被对方ban掉的时候在拨号换新的IP。

去年刷百度下拉、搞百度点击器的代理切换曾用过ADSL拨号,比较稳定,有些效果,当然也用过上面扫出来的代理,太烂,没法用。但是限于换IP需要断线重连,导致不容易并发执行任务,所以要大规模化要有些成本。

ADSL拨号可以应付对效率要求不高的采集、刷访问量、刷点击之类的。

3)第三方访问

比如通过“谷歌网页翻译”、“有道网页翻译”、“http代理浏览器”等第三方访问渠道请求目标网页。

速度慢,且采集捕获目标内容的时候多了很多干扰。

4)VPN软件

诸如“flyvpn”、“green vpn”,采集是IP被ban了直接换一个,VPN软件本身靠谱代理还是挺稳定的,就是人得在电脑旁边,手动换一次。但是偶尔查查几万关键词的百度排名、几万页面收录,用VPN还是挺悠闲的,这点量级总共也换不了多少次。

5)自建代理

买一台服务器,利用squid+stunnel搭建一台HTTP高匿代理服务器,Tinyproxy也行。squit用来实现http代理,stunnel在代理的基础上建一条隧道实现加密。

如果觉得ip数量少,就多买几台服务器,依次配置squid~~

由于是自建代理,都是独享且是真实的IP,所有相当稳定。采集、抢购、刷票、刷点击、刷主播人气什么的都可以干,只有有钱上机子就行~~

去年接了一个爬虫单子,抓国外某股票网站,共千万页面量级,反爬虫做的挺恶心,无奈买了20台低配机子做HTTP代理服务器,一个月5000成本~~

5)自建代理服务商

如果上面方法自己懒得搞,也没有关系。找个做类似服务的商家,开个api端口即可。

国外的有:

Crawlera ( Web Crawling Platform & Data as a Service )

......

国内的有:

阿步云(阿布云代理 - 最专业、最稳定、IP最丰富的高匿名HTTP代理IP提供商

鲲鹏代理(IPRENT - 国内最专业稳定高匿独享HTTP代理解决方案提供商

瀚云代理(瀚云代理 – http代理ip

......

Crawlera和阿步云都用过,除了贵都挺好的,另外在请求频率和并发数上有限制。没办法,要一个ip共享给10个人,每个人并发100,费用又不涨,他们那边得赔死,光带宽费就海里去了。

 

 

 

下面的内容来自知乎:https://www.zhihu.com/question/47419361

 

换了很多家 芝麻(http://www.zhimaruanjian.com/pay/),站大爷(http://ip.zdaye.com/FreeIPlist.html?adr=%CF%E3%B8%DB,有免费的ip,少量),西刺 ,大象都用过,西刺,大象就不说了 辣鸡!!!!差点用吐血,站大爷 说实话 客服现在好多了 但是真心贵 ,贫民用不起,质量也就跟芝麻差不多。 前端时间上知乎看了篇软文,用了下别人推荐的蘑菇代理(吐槽下,现在网站怎么都叫些无厘头的名字。。) ,吐槽归吐槽,这家还真不错,性价比高,别说我打广告,确实不错,我自己现在主要在用这家,芝麻备用(以防万一,站大爷这么牛逼都挂了好多次,我还是怕的,万一呢,不过暂时没发现有什么问题,可能是名气小所以才稳定吧)

 

现在代理IP网上一搜一大堆,因为我自己的业务需求我自己也在使用代理ip,现在用的是快代理我用的时间不能说很长,但是也有一段时间,基本现在网上代理我也都测试过,具体数据我没有闲时间去一个一个测,就是说一下这些的使用心得吧.

网上现在有芝麻代理,牛魔代理等一些今年刚上的代理,这些有心人自己仔细观察一下就能知道就是一家

还有西刺代理,站大爷,快代理,这几个都是某搜索引擎的自然排名前三个,还有之后的就不一一叙述了.

芝麻代理等很多客户端类型的代理ip提供商,这些类似于之前的被G掉的VPN,只不过他这个就是相当于国内的VPN吧

快代理,西刺代理,站大爷等适合开发者去做一些api调用,他们都有免费的,收费的ip,收费的肯定是比免费的好,这个毋庸置疑,不用想着空手套白狼的事情

 

这些地方的连接在下边.按需选择吧~

快代理 www.kuaidaili.com

西刺代理 www.xicidaili.com

站大爷 www.zdaye.com

芝麻代理 www.zhimaruanjian.com

 
 

手动搬运dalao项目过来回答一下。

virjar/proxyip - 码云 Gitee.com

这个项目做了什么东西呢? dalao是这样写的:

DungProxy是一个代理IP服务,他包括一个代理IP资源server端和一系列适配中心IP资源得客户端。

server负责代理IP资源的收集维护。

client则是一系列方便用户使用得API,他屏蔽了代理IP下载、代理IP选取、IP绑定、IP切换等比较复杂逻辑。用户只需要引入client即可方便使用代理IP服务

简单来说:

server是一个代理IP爬虫,同时负责简单的数据清洗。

client本质是一个代理IP池,获取数据源之后,基于需要代理访问的网站在本地维护一个代理IP池供爬虫使用。

参考链接:

一只程序汪的自我修养 - 可能是一份没什么用的爬虫代理IP指南(分享自知乎网)

 
 

先占个坑,现在正在写一个代理采集和校验相关程序,到时候开源出来给大伙用用


填坑来了。历时两个多月,目前终于完成了该代理项目。昨晚用知乎爬虫做了性能测试,测试结果如下

效果还不错。大家可以试用一下,好用给个star就行了。

项目地址:

SpiderClub/haipproxy​github.com
 
 

之前用过一段时间芝麻代理,还不错,就是有点贵

 
 

市面上ip软件那么多,但是考虑到价格,ip数量,连接速度,推荐一个 我之前用的,牛魔ip www.niumoip.com 现在都能试用,好坏自己决定。

 
 

都说好的代理,那我来喷一喷不好的代理吧。

1、站大爷,就是一个垃圾,骗子公司,其官网卖的那种代理扫描软件,根本没有扫描功能,就一个简单的验证功能,官网宣传说带扫描功能,其实根本不带,会技术抓包的同学可以自己去研究一下。

站大爷,客服态度蛮横,付款后有问题不退款直接加黑名单或者踢出群。

2、data5u,开放代理来来回回每天就返回那1000多个。都是重复的。

3、快代理,太贵了,不值。并且代理和data5u很多重复的。

 
 

刚开始用神箭手,实时API用起来还凑合,并发几十次,还可以。用了一段时间各种失败,并发几次都请求频率太高,找了几次客服被拉黑了,wtf...,果断弃用。

后来同事推荐了芝麻代理,因为时间紧,任务重,选了个按天不限ip的套餐,一天1500,速度哇哇的,并发几百上千的都不怕,就是略贵,虽然是公司的,但还是感觉肝儿疼,用了四天完成任务,弃用,据说18年涨到3000一天了。

好吧,拿人钱财替人消灾吧,自己写了个IP代理池,爬取网上免费的IP资源,效果还不错。顺便读了几天混淆过的js代码,找到了目标网站反爬策略的一个小漏洞,先凑合着用吧。
 
 
试试 百变IP。只为爬虫而生。
 
 

哎,这个事在这打个广告,真是有点难为情。

 

现在出来搞事情了, 做的就是这个方向。

 

与某几个省的运营商建立了非常密切的合作关系

 

机房也都是自己运营的

 

传送门在这里

 

 

也许、可能、似乎、我也不保证(逃)是目前市面上你能找到最稳定的代理了。

 

欢迎大家撩骚,手机号18129823435 :) 任何意见, 我都欢迎。

 

蟹蟹。

 
 

我们公司用阿布云 家的还是非常好用的,但要会用才用的好 。

 
 
在国内需要用个稳定点的才可以登录的
我这里有个很好用的,上 番否维皮恩评测 下载一个,我用不错
去搜索网站名 第一个网站就是
 

太阳http的ip质量不错,价格也还好,值得试一试!

 

大家千万不要买芝麻代理!

大家千万不要买芝麻代理!

大家千万不要买芝麻代理!

我买了之后发现一个都不能用,然后要退钱,对方不退钱,垃圾公司

根据《中华人民共和国合同法》第一百一十二条之规定,当事人一方不履行合同义务或者履行合同义务不符合约定的,在履行义务或者采取补救措施后,对方还有其他损失的,应当赔偿损失。及《中华人民共和国消费者权益保护法》第二十条规定,经营者向消费者提供有关商品或者服务的质量、性能、用途、有效期限等信息,应当真实、全面,不得作虚假或者引人误解的宣传。该公司存在虚假宣传行为,必须承担相应的违约责任,必须退还给您相关的款项,并应支付违约金。 因此,我向您提出如下建议: 1.与客服沟通,告诉其上述法律依据,看是否能协商解决。 2.请求消费者协会或者依法成立的其他调解组织调解 3.向当地有关行政部门投诉; 4.向人民法院提起诉讼。

 

百变IP,稳定高匿,岂止于快。这不是软文,这就是直白的推荐!

https://www.baibianip.com/api/doc.html​www.baibianip.com百变IP 稳定高匿的私密代理IP

 

百变IP提供多种接入方式和接口;

方式一(统一入口,智能转发,免提取使用):使用百变IP-Proxy,统一入口,免提取,设置白名单即可使用,支持多种转发策略;
通道A: 每次请求随机一个出口IP,每日3~8万可用IP,24小时均匀分布。
通道B:proxy.baibianip.com:8001~8020 这20个端口,每次请求都会固定一个出口IP,IP有效期1-5分钟。

方式二(通过API提取IP:Port列表后使用):用传统方式,使用动态私密代理
先提取后使用:可开通动态私密代理,通过API或者网页提取IP:Port列表后使用,接口可返回IP、Port、IP所在地区、剩余可用时间,支持自定义字段。每日3~8万可用IP,24小时均匀分布,IP有效期1-5分钟。

所有代理均为高匿私密代理,机房带宽、家庭IP,支持HTTPS、Keep-Alive、POST;

提示:代理均需设置IP白名单或使用用户名/密码认证后才可使用,白名单可通过用户中心手工设置,也可以通过API进行设置。
可以在你的机器上通过访问 来获取当前你机器的出口IP。程序尽量部署到服务器跑,部分小区宽带有多个IP出口。

对于百变IP-Proxy来说,各通道调用方式完全一样,无需任何额外改造,只需在程序中控制请求端口号即可(比如用通道B的8001端口,现在想换一个IP当出口,只需换8002就好,无需发送换IP的命令给我们),简单方便,百变IP会自动切换后端出口IP,百变IP智能转发服务会根据后端服务器的心跳情况、负载情况、网络稳定性、IP分散度等综合因素根据算法智能转发。系统支持Keep-Alive。智能转发服务不会出现因为切换IP而出现服务不能用的情况,平滑切换。
一般来说百变IP-Proxy的通道A和B可以满足大部分使用场景;

 

作为一名资深程序狗,一直在做爬虫,用过很多的代理IP。比如 快代理、阿布云、百变IP、站大爷、F代理、data5u、讯代理之类的,他们各有优劣。

快代理就是贵,私密代理IP个数少,开放代理吧就那么多,也不稳定;

阿布云,连接数太少了;站大爷贵,体验也不好;

 

你们搜淘宝,比网站便宜

 

亿洲代理,可用率99%,支持指定省市等各种自定义

 

自己现在在用一家叫亿牛云的 个人感觉挺好的 还有免费测试

 
posted @ 2018-07-01 15:30  bonelee  阅读(16684)  评论(1编辑  收藏  举报