首先我們檢測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即可
返回結(jié)果中:"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進行
現(xiàn)在我將詳細講述下這兩種分別如何進行
首先我們需要有一個可用的ip
對于方法一:利用meta函數(shù)進行攜帶即可訪問
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)
以上就是scrapy使用代理的整個思路和流程,如有問題可在下面留言