[爬蟲]一個易用的IP代理池

一個易用的IP代理池 - stand

寫爬蟲時經常會遇到各類反爬蟲手段, 封 IP 就是比較常見的反爬策略python

遇到這種狀況就須要用到代理 IP, 好用的代理一般須要花錢買, 而免費的代理常常容易失效, 因此就須要本身搭建 IP 代理池, 來獲取免費高效的代理 IP. 下面介紹一個本身寫的 IP 代理池, 歡迎 stargit

安裝

pip install stand

啓動

stand

啓動後, 爬蟲會從代理網站抓取 IP, 並將數據保存在名爲 stand.db 的 SQLite 數據庫中, 等待爬蟲抓取必定數量 IP 後, 便可使用代理github

使用

>>> from stand import get_proxy
>>> proxy = get_proxy()
>>> print(proxy)
'103.133.222.151:8080'

在 Scrapy 中使用 stand 做爲代理數據庫

import scrapy
from scrapy.crawler import CrawlerProcess


class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://api.ip.sb/ip']

    def parse(self, response):
        print(response.meta['proxy'])
        print(response.text)


DOWNLOADER_MIDDLEWARES = {
    'stand.UserAgentMiddleware': 543,
    'stand.ProxyMiddleware': 600,
}
settings = dict(
    LOG_ENABLED=False,
    DOWNLOAD_TIMEOUT=30,
    DOWNLOADER_MIDDLEWARES=DOWNLOADER_MIDDLEWARES,
)


def run():
    process = CrawlerProcess(settings)
    process.crawl(TestSpider)
    process.start()


if __name__ == "__main__":
    run()

項目說明

  1. 當啓動 stand 時, 首先會運行 crawl 函數從代理網站爬取代理 IP, 並將爬取到的結果存儲在名爲 stand.db (可經過 STAND_DIR 環境變量設置保存目錄) 的 SQLite 數據庫中, 每一個 IP 有一個初始分數 2
  2. 而後會運行 validate 函數驗證代理 IP 的有效性, 驗證經過分數設置爲最高值 3, 驗證失敗分數減 1, 當分數爲 0 時刪除該 IP
  3. 以後會定時運行 crawl 和 validate 函數分別爬取和驗證 IP, 每20分鐘爬取一次 IP, 每60分鐘驗證一次 IP
相關文章
相關標籤/搜索