python爬蟲十二:middlewares的使用,爬取糗事百科

照片怎麼加不上發表於2018-05-31

轉:https://zhuanlan.zhihu.com/p/26701898

1.專案結構    

2.user-agent的代理

# -*- coding: utf-8 -*-
'''
自定義scrapy框架的
user-agent頭
從一個被良好維護的user-agent列表裡
隨機篩選合適的user-agent
防止封鎖
'''
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

import random



#一個不容易被封鎖的user-agent列表
agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
              'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
              'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
              'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']

class RandomUserAgent(UserAgentMiddleware):
    def process_request(self,request,spider):
        '''
        定義下載中介軟體,
        必須要寫這個函式,
        這是scrapy資料流轉的一個環節
        具體可以看文件:
        http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/downloader-middleware.html
        '''
        ua = random.choice(agents)
        request.headers.setdefault('User-agent',ua)

3.ip代理

# -*- coding: utf-8 -*-
'''
從本地檔案proxy.py中
讀取可以用的代理列表
並從中隨機選擇一個代理
供給spider使用
'''
from xiubai.middlewares.proxy import proxies
import random

class RandomProxy(object):
    def process_request(self,request,spider):
        # 從檔案中隨機選擇一個代理
        proxy = random.choice(proxies)

        request.meta['proxy'] = 'http://{}'.format(proxy)

呼叫,可以直接從網上爬取免費的代理ip,進行代理點選開啟連結

# -*- coding: utf-8 -*-
'''
通過爬取可用的免費代理,
進行測試可用度之後
篩選獲得的代理

將靜態的資原始檔寫在功能檔案之外
方便及時更新維護。
'''
# 可以自行新增更多代理
proxies = [
    '89.36.215.72:1189',
    '94.177.203.123:1189',
    '110.73.11.227:8123',
    '180.183.176.189:8080',
    '109.62.247.81:8080',
]

4.settings設定

相關文章