爬取快代理的免费IP并测试

各大免费IP的网站的反爬手段往往是封掉在一定时间内访问过于频繁的IP,因此在爬取的时候需要设定一定的时间间隔,不过说实话,免费代理很多时候基本都不能用,可能一千个下来只有十几个可以用,而且几分钟之后估计也扑街了。虽然有那种付费的大量代理IP,但是也不见得好,测试过,里面优质的也很少。目前体验比较好的还是私密代理,当然还有其他。贵有贵的道理。

import requests
import time
import random
from fake_useragent import UserAgentfrom requests.exceptions import RequestException
from lxml import etree
import csv

class IPSpider(object):
    def __init__(self):
        self.url = ‘https://www.kuaidaili.com/free/inha/‘
        self.url_test = ‘http://www.baidu.com/‘  # 直接拿百度来测试IP能不能用

    def get_headers(self):
        """
            随机产生请求头
        :return:
        """
        ua = UserAgent()
        headers = {
            ‘User-Agent‘: ua.random
        }
        return headers

    def get_page(self, url):
        """
            获取网页源代码
        :param url:
        :return:
        """
        while True:
            try:
                headers = self.get_headers()
                response = requests.get(url, headers=headers, verify=False)
                if response.status_code == 200:
                    return response.text
                print(response.status_code)
                raise ValueError("打开网页错误")
            except RequestException as err:
                print(err)

    def parse_ip(self, text):
        """
            提取页面的IP和端口号
        :param text:
        :return:
        """
        html = etree.HTML(text)
        ip = html.xpath("//tr/td[1]/text()")
        print(ip)
        port = html.xpath("//tr/td[2]/text()")
        print(port)
        return zip(ip, port)

    def test_ip(self, ip, port):
        """
            测试IP是否可用
        :param ip:
        :param port:
        :return:
        """
        try:
            # url_ip = ‘http://‘ + ip + ‘:‘ + port
            # proxies = {
            #     ‘http‘: url_ip,
            #     ‘https‘: url_ip
            # }
            proxies = {
                ‘http‘: ‘http://{}:{}‘.format(ip, port),
                ‘https‘: ‘https://{}:{}‘.format(ip, port),
            }
            headers = self.get_headers()
            response = requests.get(url=self.url_test, headers=headers, proxies=proxies, timeout=8)
            if response.status_code == 200:
                print("%s可用" % ip)
                return ip, port
            return None
        except RequestException:
            print(‘%s失效‘ % ip)

    def save_ip(self, result):
        """
            可用的IP保存
        :param result:
        :return:
        """
        with open("kuaidailiip.csv", "a")as f:
            writer = csv.writer(f)
            writer.writerows(result)

    def run(self):
        """
            主函数
        :return:
        """
        for i in range(1, 1001):
            url = self.url + str(i) + ‘/‘
            text = self.get_page(url)
            ip = self.parse_ip(text)
            result = []
            for j in ip:
                ok_ip = self.test_ip(j[0], j[1])
                if ok_ip == None:
                    continue
                else:
                    result.append(ok_ip)
            self.save_ip(result)
            time.sleep(random.randint(5, 7))if __name__ == ‘__main__‘:   spider = IPSpider()   spider.run()

原文地址:https://www.cnblogs.com/lattesea/p/11576055.html

时间: 2024-08-30 09:08:58

爬取快代理的免费IP并测试的相关文章

Python实现爬取可用代理IP

在实现爬虫时,动态设置代理IP可以有效防止反爬虫,但对于普通爬虫初学者需要在代理网站上测试可用代理IP.由于手动测试过程相对比较繁琐,且重复无用过程故编写代码以实现动态抓取可用的代理IP.动态代理IP保存在Json文件中,以供后续具体项目爬虫使用,但所爬取的代理IP是免费IP,所以可能出现当时爬取能用,过一段时间无法使用的情况. 1) 先从西刺代理网站上爬取前10页,速度较快的IP,保存到proxies数组中,其中proxy使用的是requests.get()可直接使用字典格式 1 print(

Python 正则练习(一) 爬取国内代理ip

简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ip 再进行筛查过滤,最终仅仅保存真实可用代理 ip. 可能需要修改的内容: xpath 替代正则进行抓取 ip 和端口: 验证代理 ip 是否可用: 再存入mogodb 数据库替代字典. import re import requests from collections import defa

练习-爬取某图片及查询IP地址

爬取某图片的程序: #图片爬取全代码 import requests import os url='http://img0.dili360.com/rw9/ga/M01/4A/3D/wKgBy1p6qJ6ALyaOADWDaIwa9uw587.tub.jpg' root='D:/北理工爬虫课程/' path=root+url.split('/')[-1]#被加数表示的是图片路径中图片的名字加后缀 try: if not os.path.exists(root): os.mkdir(root)#如

python requests库爬取网页小实例:ip地址查询

ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代码 import requests url="http://m.ip138.com/ip.asp?ip=" try: r=requests.get(url+'202.204.80.112') r.raise_for_status() r.encoding=r.apparent_encodi

多线程爬取笔趣阁免费小说全站爬取

import threading,os,time,requests,pymongo,refrom queue import Queuefrom lxml import etreefrom bs4 import BeautifulSoup as BPclient = pymongo.MongoClient(host='localhost',port=27017)mg = client['biquge']def get_fenlei(): """ 爬取图书全部分类 :return

python2.7爬取可用代理IP

import urllib2 import random import time import re #from lxml import etree  #第三方模块 def get_proxy(page): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36' } r

某代理网站免费IP地址抓取测试

源代码在测试中... http://www.AAA.com/nn/|    122.6.107.107|    8888|    山东日照|    高匿|    HTTP|    |    |    1天|    16-05-31 12:27|    |    182.45.84.129|    8888|    山东|    高匿|    HTTP|    |    |    11小时|    16-05-31 12:27|    |    123.175.53.50|    8888|  

爬取xici代理

导入模块 import requests from requests import ConnectionError import random import re 定义headers生成器 def get_header(): USER_AGENT_LIST = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", &qu

爬取拉钩全站的职位信息

爬虫学习到今天也告一段落了,利用一个项目把自己这几个月的所学的知识来做一次总结 项目所需要的知识比较全面,很适合练手, 一 程序目的 爬取拉钩全站的职位信息存入mysql和mongodb中 二 所用到的方法 一 利用selenium登录拉钩取得cookies 二 利用redis保存selenium登录拉钩取得cookies信息,维护一个cookie池 三 爬取西刺等免费IP网站,并用redis维护一个IP池 四 利用flask把cookies和ip分别映射到网页中,用requsets得到. 五