搭建免費代理池---採集代理(1)

来源:https://www.cnblogs.com/whnba/archive/2019/10/31/11774079.html
-Advertisement-
Play Games

在對網站信息進去抓取時,難免遇到被封IP的情況。針對這一情況可採用代理IP的方法來處理,好了 現在我遇到的問題是什麼呢? 就是我沒有代理IP啊。 百度了下,發現網上有好多免費的代理IP,所以我決定把能找到的所以免費代理IP全部採集下來,以後做成介面的方式來供大家免費使用。 本篇文章主要是對採集 “6 ...


在對網站信息進去抓取時,難免遇到被封IP的情況。針對這一情況可採用代理IP的方法來處理,好了  現在我遇到的問題是什麼呢? 就是我沒有代理IP啊。

百度了下,發現網上有好多免費的代理IP,所以我決定把能找到的所以免費代理IP全部採集下來,以後做成介面的方式來供大家免費使用。

本篇文章主要是對採集 “66免費代理網 http://www.66ip.cn/”做技術總結。

1、GET/POST 請求

為了讓操作更加簡單 採用工廠模式對GET / Post 請求進行了封裝。

import requests
import abc

'''
請求方法抽象類
'''


class AbsMethod:

    @abc.abstractmethod
    def request(self, url, attach):
        pass


'''
Get 方法
'''


class Get(AbsMethod):
    '''
    請求
    '''

    def request(self, url, attach) -> requests.Response:
        res = requests.post(url, attach)
        if not res.ok:
            return res.raise_for_status()
        return res


'''
Post 方法
'''


class Post(AbsMethod):
    '''
    請求
    '''

    def request(self, url, attach) -> requests.Response:
        res = requests.get(url, attach)
        if not res.ok:
            return res.raise_for_status()
        return res


'''
方法工廠
'''


class MethodFactory:
    def create(self, method: str) -> AbsMethod:
        return eval(method)()


'''
http 請求
'''


class HttpReuqest:

    '''
    發送求請
    '''
    @staticmethod
    def send(url, attach = {}, method='Get') -> requests.Response:
        factory = MethodFactory()
        target = factory.create(method)
        return target.request(url, attach)

 

2、採集目標站點

class WWW_66IP_CN:

    '''
    URL地址
    '''
    __url = 'http://www.66ip.cn'

    '''
    頁面編碼
    '''
    __code = 'gbk'

    '''
    選擇器
    '''
    __selector = '.containerbox table tr'

    '''
    獲取免費代理
    '''

    def get_proxy(self) -> str:
        soup = bs4.BeautifulSoup(self.text, 'lxml')
        result = soup.select(self.__selector)
        result = self.__filters([str(n) for n in result])
        return result

    '''
    獲取頁面內容
    '''
    @property
    def text(self) -> str:
        http = HttpReuqest()
        res = http.send(self.__url)
        if res.headers['Content-Encoding'] == 'gzip':  # 頁面採用gizp壓縮了,需要對它進行解碼不然中文會亂碼
            return res.content.decode(self.__code)
        return res.text

    '''
    過濾
    '''

    def __filters(self, items: List[str]) -> List[list]:
        result, regex = [], re.compile(r'<td>([^<>]+)</td>')
        for item in items:
            result.append(regex.findall(item))
        return result


proxy = WWW_66IP_CN()

d = proxy.get_proxy()

print(d)

 

3、技術總結

  目標站點採用了 gzip 進行了頁面壓縮,如果不對頁面進行解碼那麼中文字元就會以亂碼的形式出現。針對這一情況,可採用 字元串函數 decode()進行解碼

  

  

4、百度網盤

鏈接:https://pan.baidu.com/s/1BStzSFPteMCcfOum6_4RUw
提取碼:dlsr


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、線上工具 1.https://www.sojson.com/ 2.http://www.w3cshool.com.cn/json/ 3.http://www.runoob.com/json/json-tutorial.html 二、JSON(JavaScriptObjectNotation) 1 ...
  • 當一個函數在其函數體內調用自身時,則稱之為遞歸,遞歸函數對於解決數學上的問題是非常有用的,比如計算階乘,生成斐波那契數列等 ...
  • Map 是 Java 中使用非常廣泛的一類集合, 對於它的遍歷訪問, 有多種方法, 本篇轉載記錄常見的5種方法, 並給出各自的適用場景作為參考. ...
  • SpringMVC總結 1. SpringMVC簡介 MVC即模型 視圖 控制器(Model View Controller) Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求 ...
  • 前言 許可權管理是所有後臺系統的都會涉及的一個重要組成部分,主要目的是對不同的人訪問資源進行許可權的控制,避免因許可權控制缺失或操作不當引發的風險問題,如操作錯誤,隱私數據泄露等問題。 目前在公司負責許可權這塊,所以對許可權這塊的設計比較熟悉,公司採用微服務架構,許可權系統自然就獨立出來了,其他業務系統包括商品 ...
  • 1 簡介 萬惡的 已經折磨程式員許久了,也帶來了許多難以發現卻造成嚴重損失的 。我們需要儘可能的避免它,有一種簡單的辦法就是在它進入下輪處理前,我們就把它扼殺在搖籃里。 本文介紹了四類方法,分別是 介面的方法、 、`Guava Apache Commons Collections List null ...
  • 局部變數與全局變數下麵代碼中,old_price,rite為全局變數,final_price為局部變數 globals() 聲明全局變數,在函數內可修改函數外的變數 內嵌函數:函數當中嵌套函數 閉包:閉包條件 1 在一個外函數中定義了一個內函數。 2 內函數里運用了外函數的臨時變數。 3 並且外函數... ...
  • 我的工具箱 "sanri tools" 現在可以一鍵生成項目了,你只需要一個配置項,即可自動生成單表增、刪,改,單記錄查詢,條件查詢,分頁查詢。而且最重要的, 生成的項目可以直接運行 內部的生成工具為:數據表工具,應該在首頁就可以看到 我取名為內容服務,這些介面全部在一個 controller 和 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...