日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy设置代理的方法

發布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapy设置代理的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據最新的scrapy官方文檔,scrapy爬蟲框架的代理配置有以下兩種方法:

1.使用中間件DownloaderMiddleware進行配置

在settings.py文件中,找到DOWNLOADER_MIDDLEWARES它是專門用來用配置scrapy的中間件.我們可以在這里進行自己爬蟲中間鍵的配置,配置后如下:

DOWNLOADER_MIDDLEWARES = {'WandoujiaCrawler.middlewares.ProxyMiddleware': 100, }

其中WandoujiaCrawler是我們的項目名稱,后面的數字代表中間件執行的優先級。

官方文檔中默認proxy中間件的優先級編號是750,我們的中間件優先級要高于默認的proxy中間鍵。

中間件middlewares.py的寫法如下(scrapy默認會在這個文件中寫好一個中間件的模板,不用管它寫在后面即可):

# -*- coding: utf-8 -*- class ProxyMiddleware(object):def process_request(self, request, spider):request.meta['proxy'] = "http://proxy.yourproxy:8001"

這里有兩個注意的問題:

  • 1.是proxy一定是要寫成 http:// 前綴,否則會出現to_bytes must receive a unicode, str or bytes object, got NoneType的錯誤.

  • 2.是官方文檔中寫到process_request方法一定要返回request對象,response對象或None的一種,但是其實寫的時候不用return,亂寫可能會報錯。另外如果代理有用戶名密碼等就需要在后面再加上一些內容:

# Use the following lines if your proxy requires authentication proxy_user_pass = "USERNAME:PASSWORD" # setup basic authentication for the proxy encoded_user_pass = base64.encodestring(proxy_user_pass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

此處配置參考:
http://www.pythontab.com/html/2014/pythonweb_0326/724.html

2.直接在爬蟲程序中設置proxy字段

我們可以直接在自己具體的爬蟲程序中設置proxy字段,代碼如下,直接在構造Request里面加上meta字段即可:

class QuotesSpider(scrapy.Spider):name = "quotes"def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse, meta={'proxy': 'http://proxy.yourproxy:8001'})def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').extract_first(),'author': quote.css('span small::text').extract_first(),'tags': quote.css('div.tags a.tag::text').extract(),}

3:通過內置的環境變量

這是在我們的start_request里面,代碼如下:(該方法比較low ,不推薦使用)

def start_requests(self):# 這里是代理ipimport osos.environ["HTTPS_PROXY"] = '37.187.149.129:1080'os.environ["HTTP_PROXY"] = '202.29.212.213:443'# 重寫了start_requests一定要重寫這個不然不能爬取了。#方法一:#for url in self.start_urls:# yield Request(url=url)# 方法二:request_list = []for url in self.start_urls:request_list.append(Request(url=url))return request_list

提示一下:meta的優先級要高于環境變量的。

總結

以上是生活随笔為你收集整理的scrapy设置代理的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。