那就須要數據庫了,並且是基於內存的數據庫,redis等。
redis安裝配置:http://www.runoob.com/redis/r...
配置中須要將redis.conf文件作簡單的修改:將bind 127.0.0.1和rdbcompression yes註釋掉。html
你能夠和本身的小夥伴試一試一個Master和多個Slaver一塊兒獲取下bt影視網的網頁url,頗有意思:redis
""" 爬蟲: for url in urls: r = requests.get(url) html_doc = r.text 多線程爬蟲: urls( 隊列 內容) work( 從隊列中獲取url --> 發送請求 --> 解析response -- >保存數據) 建立多個線程,每一個線程啓動一個work,從而實現併發,提升爬蟲效率 分佈式爬蟲: urls(保存到redis中,由於redis可被多臺電腦訪問,從而實現分佈式) 每臺電腦從redis內存中獲取url-->發送請求 --> 解析response -- >保存數據 目標 : 使用分佈式爬蟲,爬去http://www.btbtdy.net/btfl/dy30.html中全部頁 部署: Master端不須要任何修改(Master必須安裝redis server) Slaver端須要修改兩處: 1) 把rds = Redis('127.0.0.1',6379)修改爲 rds = Redis('master的ip',6379) 2) 把第64行的代碼start_request()註釋掉 """ from redis import Redis import requests # pip install redis # 存儲 urls REDIS_KEY = "btdy:urls" rds = Redis('127.0.0.1',6379) def fetch(url): """ 下載頁面,若是下載成功,返回response對象,不然返回None :param url:待爬取的url :return:返回response對象或者None """ r = requests.get(url) if r.status_code == 200: return r return None def start_request(): """ 獲取電視劇全部頁的地址,並把地址push到REDIS_KEY中 :return: """ start_url = 'http://www.btbtdy.net/btfl/dy30.html' urls = ['http://www.btbtdy.net/btfl/dy30-{0}.html'.format(str(page+1)) for page in range(62)] rds.lpush(REDIS_KEY,*urls) if __name__ == '__main__': # 從redis中的REDIS_URLS中獲取url start_request() while True: _, url = rds.blpop(REDIS_KEY) fetch(url)
爬蟲,,從入門到放棄,,,哈哈哈哈哈哈數據庫