源码剖析 - 公众号采集阅读器 Liuli

14e30ff13811bcc87a9ca0573cf01ef0.png

简介

无意中发现 Liuli 这个项目,项目 Github:https://github.com/liuli-io/liuli

看了其文章,发现 Liuli 是 Python 实现的,便打算简单看看其实现细节,老规矩,看项目,先将好奇点写下来:

  • 1.Python 怎么实现宣传文章中那么漂亮的 PC 软件界面的?

  • 2. 如何采集公众号文章?

对,我就对这两点感兴趣,经过一番阅读后,关于好奇 1,其实人家没有实现漂亮的 PC 软件界面,Liuli 只是采集,然后将内容推送过去,所以本文的重点,就是看一下它是怎么采集公众号文章的,此外在阅读过程中,发现 LiuLi 还使用了简单的方法来识别文章是否为广告文章,这点也挺有意思的,也记录一下。

公众号文章采集

Liuli 基于搜狗微信(https://weixin.sogou.com/)对公众号文章进行采集,而且实现了 2 种方式:

  • 使用 playwright 自动化浏览器的方式实现公众号文章采集

  • 使用 ruia 爬虫框架实现公众号文章的采集

我们可以通过相应的配置文件控制 Liuli 使用其中哪种方式来进行文章采集,其默认使用 ruia 的方式进行采集。

Liuli 将功能分为多个模块,然后通过调度器去调度不同的模块,调度器启动方法代码如下:

# src/liuli_schedule.py

def start(ll_config_name: str = ""):
    """调度启动函数

    Args:
        task_config (dict): 调度任务配置
    """
    if not ll_config_name:
        freeze_support()

        # 默认启动 liuli_config 目录下所有配置
        ll_config_name_list = []
        for each_file in os.listdir(Config.LL_CONFIG_DIR):
            if each_file.endswith("json"):
                # 加入启动列表
                ll_config_name_list.append(each_file.replace(".json", ""))
        # 进程池
        p = Pool(len(ll_config_name_list))
        for each_ll_config_name in ll_config_name_list:
            LOGGER.info(f"Task {each_ll_config_name} register successfully!")
            p.apply_async(run_liuli_schedule, args=(each_ll_config_name,))
        p.close()
        p.join()

    else:
        run_liuli_schedule(ll_config_name)

从代码可知,调度器会启动 Python 的进程池,然后向其中添加 run_liuli_schedule 异步任务,该异步任务中,会执行 run_liuli_task 方法,该方法才是一次完整的任务流程,代码如下:

def run_liuli_task(ll_config: dict):
    """执行调度任务

    Args:
        ll_config (dict): Liuli 任务配置
    """
    # 文章源, 用于基础查询条件
    doc_source: str = ll_config["doc_source"]
    basic_filter = {"basic_filter": {"doc_source": doc_
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

懒编程-二两

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

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

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

打赏作者

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

抵扣说明:

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

余额充值