接上文。
根據實驗,微網誌對于同一IP/Cookiess連續爬取允許時間大約為5min,是以為了連續的爬取,擁有多個賬号&代理&User_Agent 是十分必要的。
賬号這個我不多說,淘寶幾毛錢的事情,但實作自動登入擷取Cookies這個我沒有研究過,但跟今天我要說的沒什麼關系。
今天我要說的是在Scrapy中使用代理來通路微網誌進而進行爬取。
首先我們得找到一些免費可用的代理伺服器。網上有很多Python自動擷取代理的方法,我這裡隻做簡單的實驗,是以就直接在程式中寫死。
http://www.xdaili.cn/freeproxy.html
這個網站很不錯,推薦的那幾個免費的基本都能用。我這裡使用他的無密碼代理。
下面進入正文。
Settings.py的配置
想要使用代理,我們必須打開Downloader的Middleware。
設定如下:
DOWNLOADER_MIDDLEWARES = {
'Spider.middlewares.Proxy_And_UsrAgent': ,
}
由于隻是使用代理,這使得我們的代碼變得異常簡單。
from Spider.settings import USER_AGENT
Proxy = [
'180.122.155.55:31104',#這個自己更換
]
class Proxy_And_UsrAgent(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
def process_request(self,request,spider):
request.headers.setdefault('User-Agent',random.choice(USER_AGENT))
request.meta['proxy'] = 'http://' + random.choice(Proxy)
USER_AGENT這個相信大家都不陌生,這個寫在settings.py裡面,充當User_Agent清單。
每次通路,我們随機的選擇一個USER_AGENT,随機的選擇一個代理(這個不太好,應該每個賬戶固定一個代理&一個Header,多賬戶同時爬取)
process_request(),每次送出一次request,request便會傳入process_request這裡,我們就是在這裡實作添加代理&User_Agent的操作的。
的确很簡單。