Scrapy框架使用代理IP要點是什么,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)公司于2013年開始,先為東勝等服務(wù)建站,東勝等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為東勝企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
scrapy框架通過模塊化的設(shè)計實現(xiàn)了數(shù)據(jù)采集的通用功能接口,并提供自定義拓展,它將程序員從繁冗的流程式重復(fù)勞動中解放出來,給編程人員提供了靈活簡便的基礎(chǔ)構(gòu)建,對于普通的網(wǎng)頁數(shù)據(jù)采集,編程人員只需要將主要精力投入在網(wǎng)站數(shù)據(jù)分析和網(wǎng)站反爬策略分析上,結(jié)合代理IP的使用,可以實現(xiàn)項目的高效快速啟動。
主要特性包括:
1)參數(shù)化設(shè)置請求并發(fā)數(shù),自動異步執(zhí)行
2)支持xpath,簡潔高效
3)支持自定義中間件middleware
4)支持采集源列表
5)支持獨立調(diào)試,方便 shell 方式
6)支持?jǐn)?shù)據(jù)管道接口定義,用戶可以選擇文本、數(shù)據(jù)庫等多種方式
在Scrapy框架中使用代理的方式有如下幾種:
1.scrapy中間件
在項目中新建middlewares.py文件(./項目名/middlewares.py),內(nèi)容如下:
#! -*- encoding:utf-8 -*-
import base64
import sys
import random
PY3 = sys.version_info[0] >= 3
def base64ify(bytes_or_str):
if PY3 and isinstance(bytes_or_str, str):
input_bytes = bytes_or_str.encode('utf8')
else:
input_bytes = bytes_or_str
output_bytes = base64.urlsafe_b64encode(input_bytes)
if PY3:
return output_bytes.decode('ascii')
else:
return output_bytes
class ProxyMiddleware(object):
def process_request(self, request, spider):
# 代理服務(wù)器(產(chǎn)品官網(wǎng) www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理驗證信息
proxyUser = "username"
proxyPass = "password"
request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)
# 添加驗證頭
encoded_user_pass = base64ify(proxyUser + ":" + proxyPass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
# 設(shè)置IP切換頭(根據(jù)需求)
tunnel = random.randint(1,10000)
request.headers['Proxy-Tunnel'] = str(tunnel)
修改項目配置文件 (./項目名/settings.py)
DOWNLOADER_MIDDLEWARES = {
'項目名.middlewares.ProxyMiddleware': 100,
}
2.scrapy環(huán)境變量
通過設(shè)置環(huán)境變量,來使用爬蟲代理(Windows)
C:\>set http_proxy=http://username:password@ip:port
關(guān)于Scrapy框架使用代理IP要點是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。