python3 爬虫五大模块之二:URL管理器

Python的爬虫框架主要可以分为以下五个部分:

爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义;

URL管理器:负责URL的管理,包括带爬取和已爬取的URL、已经提供相应的接口函数(类似增删改查的函数)

网页下载器:负责通过URL将网页进行下载,主要是进行相应的伪装处理模拟浏览器访问、下载网页

网页解析器:负责网页信息的解析,这里是解析方式视具体需求来确定

信息采集器:负责将解析后的信息进行存储、显示等处理


代码示例是爬取CSDN博主下的所有文章为例,文章仅作为笔记使用,理论知识rarely

一、URL管理器简介

       URL管理器主要负责对爬虫的URL进行管理,它会将待爬取的URL和已经爬取的URL分别记录下来。

       URL管理器如要对外提供添加、查询URL的功能。

       核心框架如下:

'''
自定义Python伪代码
'''
# 1. 初始化待管理的URL
# 2. 提供一系列操作URL的接口函数
# 例如:
#      添加一个URL
#      添加多个URl
#      查询是否有未爬取的URL
#      取出未爬取的URL
#      ...

二、URL管理器示例:(爬取CSDN博主下的所有文章

# author : s260389826
# date : 2019/3/22
# position: chengdu


class UrlManager(object):
    def __init__(self):
        self.urls_article_new = set()  #待爬取文章
        self.urls_article_old = set()  #已爬取文章
        self.urls_page_new = set()     #待爬取页
        self.urls_page_old = set()     #已爬取页

    def add_article_url(self, url):
        '''
        一次添加一个文章的URL
        '''
        if url is None:
            print("url_manager: add article url error")
            return
        if url not in self.urls_article_new and url not in self.urls_article_old:
            self.urls_article_new.add(url)

    def add_article_urls(self, urls):
        '''
        一次添加多个文章的URL
        '''
        if urls is None or len(urls) == 0:
            print("url_manager: add article urls error")
            return
        for url in urls:
            self.add_article_url(url)

    def add_page_url(self, url):
        '''
        一次添加一个页的URL
        '''
        if url is None:
            print("url_manager: add page url error")
            return
        if url not in self.urls_page_new and url not in self.urls_page_old:
            self.urls_page_new.add(url)

    def add_page_urls(self, urls):
        '''
        一次添加多个页的URL
        '''
        if urls is None or len(urls) == 0:
            print("url_manager: add page urls error")
            return
        for url in urls:
            self.add_page_url(url)

    def has_page_url(self):
        '''
        查询是否有带爬取的页
        '''
        return len(self.urls_page_new) != 0

    def get_page_url(self):
        '''
        取出带爬取的页
        '''
        page_url = self.urls_page_new.pop()
        self.urls_page_old.add(page_url)
        return page_url


三、上述代码用到的知识点:

       1. URL管理器使用集合:

    def __init__(self):
        self.urls_article_new = set()
        self.urls_article_old = set()
        self.urls_page_new = set()
        self.urls_page_old = set()

    使用集合主要为了去除重复的URL,它可以自动的去除重复URL。非必须但是比较方便

       2. 集合操作:

        page_url = self.urls_page_new.pop()
        self.urls_page_old.add(page_url)

     pop(): 从集合中去掉一个元素

     add(): 往集合中添加一个元素

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值