若有收穫,就點個贊吧
在我們學習爬蟲的時候會接觸學習到很多的爬蟲框架可以供我們選擇,也學習瞭如何應對一些目標網站的反爬機制。那麼我們今天就簡單的交流下Python的Scrapy爬蟲框架以及使用代理進行採集的方法,還有如何隨機使用預先設好的user-agent來進行爬取的用法。
在程式裡面代理的使用是比較簡單的步驟,只需要幾步,測試下代理是否通過就可以了。
#! -*- 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): # 代理伺服器(產品官網 ) 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 # 設定IP切換頭(根據需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel)
關於使用隨機user-agent,預設情況下scrapy採集時只能使用一種user-agent,這樣容易被網站遮蔽,下面的程式碼可以從預先定義的user- agent的列表中隨機選擇一個來採集不同的頁面。
# 新增驗證頭 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
這裡只是簡單的交流下在爬蟲程式中代理ip和隨機ua的使用方式,不同的程式語言有偏差,有需要的小夥伴可以根據自己的需求進行調整測試。