• [爬虫]一个易用的IP代理池


    一个易用的IP代理池 - stand

    写爬虫时常常会遇到各种反爬虫手段, 封 IP 就是比较常见的反爬策略

    遇到这种情况就需要用到代理 IP, 好用的代理通常需要花钱买, 而免费的代理经常容易失效, 所以就需要自己搭建 IP 代理池, 来获取免费高效的代理 IP. 下面介绍一个自己写的 IP 代理池, 欢迎 star

    安装

    pip install stand
    

    启动

    stand
    

    启动后, 爬虫会从代理网站抓取 IP, 并将数据保存在名为 stand.db 的 SQLite 数据库中, 等待爬虫抓取一定数量 IP 后, 即可使用代理

    使用

    >>> 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
  • 相关阅读:
    Leetcode: N-Queens
    Leetcode: Sudoku Solver
    Leetcode: Binary Tree Maximum Path Sum
    Leetcode: Gas Station
    Leetcode: Convert Sorted List to Binary Search Tree
    Leetcode: Permutations II
    Leetcode: Reorder List && Summary: Reverse a LinkedList
    Leetcode: Unique Binary Search Trees II
    Leetcode: Subsets II
    Leetcode: Unique Paths II
  • 原文地址:https://www.cnblogs.com/lin-zone/p/12054288.html
Copyright © 2020-2023  润新知