资讯专栏INFORMATION COLUMN

分布式爬虫原理

LeexMuller / 3119人阅读

分布式爬虫原理

什么是分布式爬虫:
额,这个问题呢,我这样解释,例如爬取网站内的二级网站,我们就需要获取网站中的二级、三级...很多个网站,那么我们如果用自己一台主机爬取明显效率很低,这个时候我们就需要其他主机的帮助了,这个时候我们就将作为Master,为其他主机Slaver提供url的同时,启动程序,没错,我们的工作就这么多,而Slaver主机的作用就是接收url,解析并获取想要的数据。。。。


那么问题来了,我们如何将Master抓取到的网站分给别的主机呢?

那就需要数据库了,而且是基于内存的数据库,redis等。
redis安装配置:http://www.runoob.com/redis/r...
配置中需要将redis.conf文件做简单的修改:将bind 127.0.0.1和rdbcompression yes注释掉。


最后如何单线程抓取网页呢?

你可以和自己的小伙伴试一试一个Master和多个Slaver一起获取下bt影视网的网页url,很有意思:

"""
爬虫:
    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)

爬虫,,从入门到放弃,,,哈哈哈哈哈哈

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42079.html

相关文章

  • Python3网络爬虫实战---14、部署相关库的安装:Scrapyrt、Gerapy

    摘要:相关链接官方文档安装推荐使用安装,命令如下命令执行完毕之后即可完成安装。的安装是一个分布式管理模块,本节来介绍一下的安装方式。如果没有错误报出,则证明库已经安装好了。上一篇文章网络爬虫实战部署相关库下一篇文章网络爬虫实战爬虫基础基本原理 上一篇文章:Python3网络爬虫实战---13、部署相关库ScrapydClient、ScrapydAPI下一篇文章:Python3网络爬虫实战--...

    nihao 评论0 收藏0
  • 后端知识拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞这个词来自操作系统的线程进程的状态模型网络爬虫基本原理一后端掘金网络爬虫是捜索引擎抓取系统的重要组成部分。每门主要编程语言现未来已到后端掘金使用和在相同环境各加载多张小图片,性能相差一倍。 2016 年度小结(服务器端方向)| 掘金技术征文 - 后端 - 掘金今年年初我花了三个月的业余时间用 Laravel 开发了一个项目,在此之前,除了去年换工作准备面试时,我并...

    CoderBear 评论0 收藏0
  • 后端知识拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞这个词来自操作系统的线程进程的状态模型网络爬虫基本原理一后端掘金网络爬虫是捜索引擎抓取系统的重要组成部分。每门主要编程语言现未来已到后端掘金使用和在相同环境各加载多张小图片,性能相差一倍。 2016 年度小结(服务器端方向)| 掘金技术征文 - 后端 - 掘金今年年初我花了三个月的业余时间用 Laravel 开发了一个项目,在此之前,除了去年换工作准备面试时,我并...

    Carl 评论0 收藏0
  • scrapy-redis布式爬虫框架详解

    摘要:分布式爬虫框架详解随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。下载器中间件位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应。 scrapy-redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。由于互联网是开放的,每个人都可以在网络上...

    myeveryheart 评论0 收藏0

发表评论

0条评论

LeexMuller

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<