寫爬蟲時經常會遇到各類反爬蟲手段, 封 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()