Python爬取国外可用的代理IP

这是作者曾经在某个程序中写的一个python模块,其作用是爬取国外的一个免费代理IP网站,获得免费的代理IP。这个模块需要科学上网才能使用。

模块只解析了网页的 ip及其端口,其实还有很多关于代理IP的其他数据,比如IP的国家,访问延时,是否支持HTTPS等。有兴趣可自行研究。

使用了BeautifulSoup4 以及 requests 库。

完整代码如下:

from bs4 import BeautifulSoup as bs
import requests as _r
import random

PROXY_UPDATE_QUANTITY = 80

PROXY_WEB_API = 'https://free-proxy-list.net'

class proxies:
    def __init__(self,metux=None):
        self.proxies = []
        self.metux = metux

    def update(self):
        try:
            resp = _r.get(PROXY_WEB_API)
            html = resp.text
        except Exception as err:
            print(err)
            print('IP表更新失败')
            return 0
        soup = bs(html,'html.parser')
        table = soup.find('table')
        tmp_proxies = []
        c = 0
        for tr in table.tbody:
            if c >= PROXY_UPDATE_QUANTITY: break
            td = tr.findAll('td')
            ip = td[0].string
            port = td[1].string
            tmp_proxies.append(ip+':'+port)
            c += 1

        if self.metux:
            with self.metux:
                self.proxies = tmp_proxies[:]
        else:
            self.proxies = tmp_proxies[:]
        return len(self.proxies)
    def get(self):
        return {'http':'http://'+random.choice(self.proxies)}

PROXY_UPDATE_QUANTITY 为每次爬取数量,这个数建议不要太高,不要超过80,最好是20.

proxies实例化后应该执行一次update()方法。如果程序持久化运行,应该每隔一段时间执行一次,保证获取到的代理IP都为最新的可用的,建议为2分钟。

get()方法会从上次爬取到的IP列表中随机返回一个已经格式化好的字典格式。到底要用什么格式,可自行修改代码。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/1485.html

分类: 计算机技术
推荐阅读:
Python使用蒙特卡洛法计算圆周率 蒙特卡洛方法通过在单位正方形内随机生成点,并判断这些点是否在单位圆内的比例来估算圆周率。当随机点数量越多时,估算值越趋近于真实值。
Python max()函数 max() 是 Python 中的一个内置函数,用于返回给定可迭代对象中的最大值。
C语言ispunct()函数:判断字符是否为标点符号 ispunct()是C语言标准库中的一个函数,用于检查一个字符是否为标点符号;如果传入的字符参数是标点符号,则返回非0值,否则返回0;
Nginx禁止使用IP直接访问 在有些场景中,我们希望访问者只能通过域名访问网站,不允许访问者直接通过IP进行访问,这一简单功能可通过配置Nginx实现。
Linux删除所有与扩展名不匹配的文件 在Linux系统下,当你想删除某个文件夹下没有指定扩展名的所有文件时,你可以使用这条命令来实现,它将会删除目录下所有与扩展名不匹配的文件:
Rust解析JSON,结构体序列化和反序列化 JSON一种常用的由键值对组成的数据对象;本文将通过多个例子讲解在Rust中如何解析JSON内容,以及如何将结构体转换成JSON字符串。