那就须要数据库了,并且是基于内存的数据库,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)
爬虫,,从入门到放弃,,,哈哈哈哈哈哈数据库