建立爬虫代理IP池

#!/usr/bin/python3.5
# -*- coding:utf-8 -*-

import time
import tempfile
from lxml import etree
from urllib import request

user_agent = ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0‘

def get_content(url):                   # 获取网页内容
    global user_agent
    headers = {‘User-Agent‘: user_agent}
    req = request.Request(url=url, headers=headers)
    res = request.urlopen(req)
    return res.read().decode(‘utf-8‘)

def get_info(tmp,content):              # 提取网页信息 / ip 端口
    ip_list = etree.HTML(content).xpath(‘//table[contains(@id,"ip_list")]/tr/td[2]/text()‘)
    port_list = etree.HTML(content).xpath(‘//table[contains(@id,"ip_list")]/tr/td[3]/text()‘)
    for i in range(0,len(ip_list)):
        out = u""
        out += u"" + ip_list[i]
        out += u":" + port_list[i]
        tmp.write((out + u"\n").encode(‘utf-8‘))          # 所有ip和端口号写入data文件

def verify_ip(ip,port,test_url):        # 验证 ip+port 有效性
    global user_agent
    headers = {‘User-Agent‘: user_agent,‘Host‘: ‘www.12306.cn‘,‘Referer‘: ‘http://www.12306.cn/‘}
    proxy = {‘http‘:‘http://%s:%s‘%(ip,port)}
    print(proxy)

    proxy_handler = request.ProxyHandler(proxy)
    opener = request.build_opener(proxy_handler)
    request.install_opener(opener)

    req = request.Request(url=test_url,headers=headers)
    time.sleep(1)
    try:
        res = request.urlopen(req)
        time.sleep(2)
        content = res.read()
        if content:
            print(‘{0}:{1} is ok‘.format(ip,port))
            with open("proxy_info.txt", "a") as fd:       # 可用ip+port保存到proxy_info.txt文件中
                fd.write(ip + u":" + port + "\n")
        else:
            print(‘{0}:{1} is unavailable‘.format(ip,port))
    except request.URLError as e:
        print(e.reason)

def verify_ip2(ip,port,test_url):
    import requests
    try:
        response = requests.get(test_url,proxies={‘http‘:‘http://{0}:{1}‘.format(ip,port)},timeout=2)
        # print(response.status_code)
    except Exception as e:
        print("{0}:{1} failed".format(ip,port),e)
    else:
        print("{0}:{1} is ok".format(ip,port))
        with open("proxy_info.txt", "a") as fd:  # 可用ip+port保存到proxy_info.txt文件中
            fd.write(ip + u":" + port + "\n")

if __name__ == ‘__main__‘:
    url = ‘http://www.xicidaili.com/nn/‘
    test_url = "http://httpbin.org/"
    url_list = [ url + str(i) for i in range(1,2) ]
    tmp = tempfile.TemporaryFile()
    for url in url_list:
        content = get_content(url)
        time.sleep(2)
        get_info(tmp,content)

    tmp.seek(0)
    for item in tmp.readlines():
        item = item.decode(‘utf-8‘)
        # verify_ip(item.split(u":")[0],item.split(u":")[1].strip(),test_url)
        verify_ip2(item.split(u":")[0],item.split(u":")[1].strip(),test_url)
    tmp.close()

  

时间: 2024-11-06 03:40:03

建立爬虫代理IP池的相关文章

【python3】如何建立爬虫代理ip池

一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可以通过降低爬虫的频率,或者更改ip来应对.后者就需要有一个可用的代理ip池,以供爬虫工作时切换. 二.如何建立一个爬虫代理ip池 思路:   1.找到一个免费的ip代理网站(如:西刺代理) 2.爬取ip(常规爬取requests+BeautifulSoup) 3.验证ip有效性(携带爬取到的ip,去

维护爬虫代理IP池--采集并验证

任务分析 我们爬的免费代理来自于https://www.kuaidaili.com这个网站.用`requests`将ip地址与端口采集过来,将`IP`与`PORT`组合成`requests`需要的代理格式,用`requests`访问`[http://ipcheck.chinahosting.tk/][1]`,并判断返回的字符串是否是代理IP,若是,则代理IP有效,若不是,则代理IP无效. 数据采集现在已经成为了基本操作了,所以大家直接看代码就可以了,注释应该写的很清楚了.如果是个新手,那么可以看

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望指正. 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于

如何搭建稳定的代理ip池, 供爬虫使用

新型的代理ip池aox_proxy_pool 在这篇文章之前, 应该不少人都看过很多搭建代理ip池的文章, 然后发现都是坑, 无法使用.说的比较多的 推荐买xx家的代理ip, 贼稳定, 好使(广告) 抓取xx免费代理ip, 然后自己写一个校验, 然后写一个api, 提供给爬虫使用 第一种方法就不说了, 真的存在几家不错的代理ip(别问我谁家的好, 我不知道, 我写这篇文章就为了推销我自己写的项目好伐) 第二种, github上这种项目海了去了, 绝大部分, 在你搭建好以后, 发现爬虫还是爬不动,

实战1:建立代理IP池

一.爬取免费代理IP 1.爬取代理IP: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Meng Zhaoce import requests from bs4 import BeautifulSoup from multiprocessing.dummy import Pool as ThreadPool #多线程模块 from pymongo import MongoClient data = [] def getIp(page)

构建一个给爬虫使用的代理IP池

做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径得到: 从免费的网站上获取,质量很低,能用的IP极少 购买收费的代理服务,质量高很多 自己搭建代理服务器,稳定,但需要大量的服务器资源. 本文的代理IP池是通过爬虫事先从多个免费网站上获取代理IP之后,再做检查判断IP是否可用,可用的话就存放到MongoDB中,最后展示到前端的页面上. 获取可用Pr

Redis学习之代理 ip 池设计方法详解

代理 ip 因为配置简单而且廉价,经常用来作为反反爬虫的手段,但是稳定性一直是其诟病.筛选出优质的代理 ip 并不简单,即使付费购买的代理 ip 源,卖家也不敢保证 100% 可用:另外代理 ip 的生命周期也无法预知,可能上一秒能用,下一秒就扑街了.基于这些原因,会给使用代理 ip 的爬虫程序带来很多不稳定的因素.要排除代理 ip 的影响,通常的做法是建一个代理 ip 池,每次请求前来池子取一个 ip,用完之后归还,保证池子里的 ip 都是可用的.本文接下来就探讨一下,如何使用 Redis 数

基于 Redis 的代理 ip 池设计

代理 ip 因为配置简单而且廉价,经常用来作为反反爬虫的手段,但是稳定性一直是其诟病.筛选出优质的代理 ip 并不简单,即使付费购买的代理 ip 源,卖家也不敢保证 100% 可用:另外代理 ip 的生命周期也无法预知,可能上一秒能用,下一秒就扑街了.基于这些原因,会给使用代理 ip 的爬虫程序带来很多不稳定的因素.要排除代理 ip 的影响,通常的做法是建一个代理 ip 池,每次请求前来池子取一个 ip,用完之后归还,保证池子里的 ip 都是可用的.本文接下来就探讨一下,如何使用 Redis 构

.Net——做一个简单代理IP池

一.缘由. 抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 IP 地址拉入系统黑名单.从而达到禁止本地 IP 访问数据的请求. 二.思路. 根据其他 代理 IP 网站,进行一个免费的代理 IP 进行搜集,然后进行统一 验证 管理 如下图: 三.抓取包含代理 IP 的网站页面. 抓取来网站代码之后,利用 HtmlAgilityPack 进行 html 的解析.并将代理 IP 验证,存放队列等操作. 四.直接看效果图. 运行效果. 浏览器 请求 :http://127.0.0.1:12