Newspaper高级使用指南:多线程下载与定制化配置

Newspaper高级使用指南:多线程下载与定制化配置

newspaper News, full-text, and article metadata extraction in Python 3. Advanced docs: newspaper 项目地址: https://gitcode.com/gh_mirrors/ne/newspaper

多线程文章下载优化

在实际应用中,单线程下载新闻文章效率低下,但过度并发请求又会导致目标网站限流甚至封禁IP。Newspaper提供了智能的多线程下载方案,通过为每个新闻源分配1-2个线程,在提高下载速度的同时保持对目标网站的友好访问。

import newspaper
from newspaper import news_pool

# 构建多个新闻源
slate_paper = newspaper.build('http://slate.com')
tc_paper = newspaper.build('http://techcrunch.com')
espn_paper = newspaper.build('http://espn.com')

# 配置线程池
papers = [slate_paper, tc_paper, espn_paper]
news_pool.set(papers, threads_per_source=2)  # 总共创建6个线程(3源×2线程)
news_pool.join()

# 此时所有文章都已下载完成
print(slate_paper.articles[10].html)

这种设计既保证了下载效率,又避免了给单一网站造成过大访问压力,是生产环境中推荐的下载方式。

保留文章正文HTML结构

默认情况下,Newspaper会提取纯文本内容,但有时我们需要保留正文的HTML结构,以便后续处理或展示。通过设置keep_article_html=True参数,可以获取带有原始HTML标签的正文内容。

from newspaper import Article

a = Article('http://www.cnn.com/2014/01/12/world/asia/north-korea-charles-smith/index.html',
            keep_article_html=True)

a.download()
a.parse()

print(a.article_html)  # 输出带HTML标签的正文内容

解析后,还可以访问底层的DOM对象:

print(a.clean_dom)     # 获取清理后的lxml DOM对象
print(a.clean_top_node) # 获取包含正文的顶层DOM节点

支持新语言的扩展方法

Newspaper的文本提取算法依赖于对停用词的识别,因此添加新语言支持需要提供该语言的停用词列表。根据语言类型不同,处理方式也有所区别:

拉丁语系语言

  1. 创建停用词文件:stopwords-<语言代码>.txt
  2. 将文件放入资源目录newspaper/resources/text/

非拉丁语系语言(如中文、阿拉伯语)

  1. 同上创建停用词文件
  2. 提供专门的分词器(tokenizer)实现
    • 中文使用jieba分词
    • 阿拉伯语使用NLTK的分词器

添加新语言后,需要更新项目文档中支持的语言列表。

底层Source API详解

除了使用高级的newspaper.build()API,开发者可以直接操作Source类,获得更精细的控制:

from newspaper import Source

# 基础构建
cnn_paper = Source('http://cnn.com')
cnn_paper.build()
print(cnn_paper.size())  # 文章数量

# 分步构建(完全控制流程)
cnn_paper = Source('http://cnn.com')
cnn_paper.download()
cnn_paper.parse()
cnn_paper.set_categories()
cnn_paper.download_categories()
cnn_paper.parse_categories()
cnn_paper.set_feeds()
cnn_paper.download_feeds()
cnn_paper.generate_articles()

这种分步构建方式允许开发者在任意阶段介入处理过程,适合需要定制化处理的场景。

配置参数详解

Newspaper提供两种配置方式:命名参数和Config对象。

命名参数方式(推荐)

cnn = newspaper.build('http://cnn.com', 
                     language='en', 
                     memoize_articles=False)

article = Article(url='http://cnn.com/french/...', 
                  language='fr', 
                  fetch_images=False)

Config对象方式

from newspaper import Config

config = Config()
config.memoize_articles = False
config.language = 'en'

cbs_paper = newspaper.build('http://cbs.com', config)

重要配置参数说明

  • 内容提取相关:

    • MIN_WORD_COUNT: 文章最小词数(默认300)
    • MIN_SENT_COUNT: 文章最小句子数(默认7)
    • MAX_TITLE: 标题最大长度(默认200字符)
  • 网络请求相关:

    • request_timeout: 请求超时时间(默认7秒)
    • number_threads: 线程数(默认10)
    • follow_meta_refresh: 是否跟随meta刷新重定向(默认False)
  • 功能开关:

    • fetch_images: 是否下载图片(默认True)
    • keep_article_html: 是否保留正文HTML(默认False)
    • memoize_articles: 是否缓存文章(默认True)

开发者应根据实际需求合理配置这些参数,在功能完整性和性能之间取得平衡。对于生产环境,建议适当增加超时时间和线程数,同时开启缓存功能以提高效率。

newspaper News, full-text, and article metadata extraction in Python 3. Advanced docs: newspaper 项目地址: https://gitcode.com/gh_mirrors/ne/newspaper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仲嘉煊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值