首先我們檢測ip是否可用:
1.對於免費代理的檢測
#免費代理或不用密碼的代理 url = 'http://httpbin.org/get' proxy = '127.0.0.0:8000' proxies = { 'http': 'http://' + proxy, 'https': 'https://' + proxy, } response = requests.get(url, proxies=proxies, verify=False) print(response.text)
注:這里的proxy改成你要檢測的ip即可
返回結果中:"origin": "127.0.0.0" #即為你的代理,可用
2.對於付費代理的檢測:
#測試付費代理和加密代理 url = 'http://httpbin.org/get' proxy_host = '127.0.0.0' proxy_port = '8000' proxy_user = 'root' proxy_pass = 'root' proxy_meta = 'http://%(user)s:%(pass)s@%(host)s:%(port)s' % { 'host': proxy_host, 'port': proxy_port, 'user': proxy_user, 'pass': proxy_pass, } proxies = { 'http': proxy_meta, 'https': proxy_meta, } response = requests.get(url, proxies=proxies) print(response.text)
將上面的ip和賬戶之類的換成你自己的即可(參照阿布雲給的示例進行付費檢測)
下面將代理運用到scrapy框架中:
在scrapy框架中有兩種方法進行
1.直接編寫在scrapy爬蟲代碼中
2.利用中間件middlewares.py進行
現在我將詳細講述下這兩種分別如何進行
首先我們需要有一個可用的ip
對於方法一:利用meta函數進行攜帶即可訪問
scrapy爬蟲代碼中:
import scrapy class ProxySpider(scrapy.Spider): name = 'proxy' allowed_domains = ["httpbin.org"] def start_requests(self): url = 'http://httpbin.org/get' proxy = '127.0.0.0:8000' proxies = "" if url.startswith("http://"): proxies = "http://"+str(proxy) elif url.startswith("https://"): proxies = "https://"+str(proxy) #注意這里面的meta={'proxy':proxies},一定要是proxy進行攜帶,其它的不行,后面的proxies一定 要是字符串,其它任何形式都不行 yield scrapy.Request(url, callback=self.parse,meta={'proxy':proxies}) def parse(self,response): print(response.text)
(好多坑啊,寫代碼的時候踩着都想流淚)
對於方法二:利用middlewares中間件進行
1.在middlewares.py問件中添加如下代碼即可:
#配置代理 class ProxyMiddleware(object): def process_request(self,request,spider): if request.url.startswith("http://"): request.meta['proxy']="http://"+'127.0.0.0:8000' # http代理 elif request.url.startswith("https://"): request.meta['proxy']="https://"+'127.0.0.0:8000' # https代理
2.在settings.py文件中添加配置
# Enable or disable downloader middlewares # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { #這個biquge為你項目的名字,我是爬筆趣閣的,2333~ 'biquge.middlewares.ProxyMiddleware': 100, }
3.scrapy爬蟲代碼中正常編寫代碼,不用做任何修改/添加
import scrapy class ProxySpider(scrapy.Spider): name = 'proxy' allowed_domains = ["httpbin.org"] # start_urls = ['http://httpbin.org/get'] def start_requests(self): url = 'http://httpbin.org/get' yield scrapy.Request(url, callback=self.parse) def parse(self,response): print(response.text)
ip代理池的應用:https://blog.csdn.net/u013421629/article/details/77884245