scrapy中添加代理ip的兩種方式


方法1

在生成Request請求對象的時候,把代理ip以字典的形式傳遞給meta

# 爬蟲.py

class T1Spider(scrapy.Spider):
    name = 't1'
    allowed_domains = ['baidu.com']
    start_urls = ['https://baidu.com/']

    def parse(self, response):
        proxyip = get_ip()  # 這個是獲取ip的函數,返回類似 '127.0.0.1:8000'的字符串
        yield scrapy.Request(
            url = 'https://baidu.com/',
            callback= self.p1, # 回調函數
            meta={'proxy':'https://' + proxyip},  # 這個的meta接收的對象需要是個字典
                                                                  # 協議類型需要看請求對應需要的協議頭
        )    

 

 

方法2

在中間件的中 process_request 方法中 把代理ip 傳遞給Request對象的meta屬性

#  中間件.py
class
Test1DownloaderMiddleware: def process_request(self, request, spider): # 這個是獲取ip的函數,返回類似 '127.0.0.1:8000'的字符串 def get_ip(): '''獲取代理ip''' url = 'http://192.168.3.249:9999/api/v1/getIp' return (requests.get(url).json()['ip']) def change_proxy_in_middleware(): '''下載器中間件中設置代理 定義在process_request內部可以直接使用request這個實例對象 ''' ht = (re.search(r'(.*?)://', request.url).group()) # 獲取協議類型 proxy_ip = ht + get_ip() # 協議 + ip ---> 代理 request.meta['proxy'] = proxy_ip # 把代理傳遞給request change_proxy_in_middleware() # 把過程封裝在了函數內部,所以這也一定要進行調用 return None

 記得在settings.py中打開中間件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM