scrapy框架之代理的使用


首先我們檢測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


免責聲明!

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



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