天天看點

使用 Python Scrapy 爬取微網誌内容【二】

接上文。

根據實驗,微網誌對于同一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的操作的。

的确很簡單。