吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9839|回复: 36
收起左侧

[Python 转载] 获取免费的https代{过}{滤}理

  [复制链接]
subney 发表于 2021-8-7 21:45

现在爬个网页太难了。
爬快了被封IP
爬慢了,等的着急
还是用代{过}{滤}理好了,从github上找到了大佬分享的免费代{过}{滤}理,貌似可以用,写了一个小脚本获取。

from multiprocessing.dummy import Lock
import re
import requests
import random
import time

headers={
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0'
}

#source可以替换,github上有很多
source='https://github.com/roosterkid/openproxylist/blob/main/HTTPS_RAW.txt'

def get_proxies(source_url=source):
    print('Try get proxies from:',source_url)
    resp=requests.get(source_url,verify=False,headers=headers)
    if resp.status_code!=200:
        print('Request for source page failed!')
        raise Exception('Get proxies Failed!')
    resp.encoding='utf8'
    raws=re.findall(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,6})',resp.text)
    proxies=[]
    for r in raws:
        proxies.append('https://'+r)
    return proxies

def get_proxies_retry(retries=5):
    if retries:
        try:
            proxies= get_proxies()
            print('Get proxies:',len(proxies))
            return proxies
        except Exception as e :
            print('Get proxies failed!')
            print(e)
            print('Remain retry times: ',retries)
            retries-=1
            time.sleep(3)
            return get_proxies_retry(retries)
    else:
        raise Exception("Can not get proxies with retrying!")

#包裹成一个类,方便调用
class ProxyPool():
    def __init__(self,minimal=10) -> None:
        self.proxies=[]
                #多线程爬虫时,加个锁
        self._lock=Lock()
        self.minimal=minimal

    def pick_proxy(self):
            #选择proxy时,检查代{过}{滤}理池是否够用
        self._fill_pool()
        return random.choice(self.proxies)

    def remove_proxy(self,proxy):
        try:
            self.proxies.remove(proxy)
            print('Remove proxy:',proxy)
        except:
            print('Proxy has been removed!')

    def _fill_pool(self):
            #少于minimal个代{过}{滤}理时,更新代{过}{滤}理池
        if len(self.proxies)<self.minimal:
                    #加锁,防止同时重复调用
            self._lock.acquire()
            if len(self.proxies)<self.minimal:
                self.proxies=get_proxies_retry()
            self._lock.release()

使用

proxyPool=ProxyPool()
proxy=proxyPool.pick_proxy()
requests.get('url',proxies={'https':proxy})
#如果代{过}{滤}理不可用,删除
proxyPool.remove_proxy(proxy)

问题:从github获取代{过}{滤}理列表时,偶尔会失败,可能是我的网络问题。

免费评分

参与人数 7吾爱币 +7 热心值 +5 收起 理由
lslslsls12 + 1 + 1 谢谢@Thanks!
MrGeg + 1 + 1 用心讨论,共获提升!
lloveyoutjq + 1 我很赞同!
yyb414 + 1 + 1 热心回复!
多幸运遇见baby + 1 + 1 谢谢@Thanks!
lin4578 + 1 热心回复!
52jcool + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

15386660167 发表于 2021-8-8 13:38
要的就是速度  写代{过}{滤}理加 user——anent   我是想想法让他月快月还    代{过}{滤}理要搞验证也要搞
 楼主| subney 发表于 2021-9-14 07:29
li63033 发表于 2021-9-13 20:41
正在愁代{过}{滤}理的事呢,太及时了!楼主还有什么免费好用的代{过}{滤}理可以推荐一下吗

github上搜一搜
 楼主| subney 发表于 2021-8-7 21:45
行踪落落 发表于 2021-8-7 21:47
感谢楼主分享
52jcool 发表于 2021-8-7 21:56
谢谢分享,再用了
410791007 发表于 2021-8-7 22:09
小白不会用
i2080 发表于 2021-8-7 22:10
感谢楼主分享!
jjl 发表于 2021-8-7 22:11
感谢分享,每天学一点
南归不NG 发表于 2021-8-7 22:26

能用到的就不是小白,小白用不到....
2015abc 发表于 2021-8-7 22:26
谢谢分享,学习一下
南归不NG 发表于 2021-8-7 22:27
source_url是github,有时可能也访问不了...
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 01:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表