一个非常简单的Python新闻爬虫。 由柏林洪堡大学开发。
Fundus是:
-
一个静态新闻爬虫。 Fundus让你只需几行Python代码就能爬取在线新闻文章! 无论是从实时网站还是CC-NEWS数据集。
-
一个开源Python包。 Fundus的理念是共同构建。 我们欢迎你的贡献,帮助Fundus成长!
快速开始
要从pip安装,只需执行:
pip install fundus
Fundus需要Python 3.8+。
示例1:爬取一批英语新闻文章
让我们使用Fundus从美国的发布商那里爬取2篇文章。
from fundus import PublisherCollection, Crawler
# 初始化美国新闻发布商的爬虫
crawler = Crawler(PublisherCollection.us)
# 爬取2篇文章并打印
for article in crawler.crawl(max_articles=2):
print(article)
就这么简单!
如果你运行这段代码,它应该会打印出类似这样的内容:
Fundus-Article:
- 标题: "费恩斯坦的回归不足以确认有争议的新[...]"
- 正文: "周四,民主党人在最后一刻通过了对乔·拜登总统三名有争议的法院提名人的投票,
这要归功于[...]"
- URL: https://freebeacon.com/politics/feinsteins-return-not-enough-for-confirmation-of-controversial-new-hampshire-judicial-nominee/
- 来源: FreeBeacon (2023-05-11 18:41)
Fundus-Article:
- 标题: "西北大学学生政府因[...]冻结共和党学生团体资金"
- 正文: "伊利诺伊州西北大学的学生政府"无限期"冻结了该大学
共和党学生分会的资金[...]"
- URL: https://www.foxnews.com/us/northwestern-student-government-freezes-college-republicans-funding-poster-critical-lgbtq-community
- 来源: FoxNews (2023-05-09 14:37)
这个输出告诉你已经成功爬取了两篇文章!
对于每篇文章,输出详细列出了:
- 文章的"标题",即其头条
- "正文",即文章的主体内容
- 爬取的"URL"
- 新闻"来源"
示例2:爬取特定新闻来源
也许你想爬取特定的新闻来源。让我们只爬取《纽约客》的新闻文章:
from fundus import PublisherCollection, Crawler
# 初始化《纽约客》的爬虫
crawler = Crawler(PublisherCollection.us.TheNewYorker)
# 爬取2篇文章并打印
for article in crawler.crawl(max_articles=2):
print(article)
示例3:爬取100万篇文章
为了爬取如此大量的数据,Fundus依赖于CommonCrawl
网络存档,特别是新闻爬虫CC-NEWS
。
如果你不熟悉CommonCrawl
或CC-NEWS
,请查看他们的网站。
只需导入我们的CCNewsCrawler
,并确保事先查看我们的教程。
from fundus import PublisherCollection, CCNewsCrawler
# 使用fundus支持的所有发布商初始化爬虫
crawler = CCNewsCrawler(*PublisherCollection)
# 爬取100万篇文章并打印
for article in crawler.crawl(max_articles=1000000):
print(article)
注意:默认情况下,爬虫会利用你系统上所有可用的CPU核心。
为了获得最佳性能,我们建议使用processes
参数手动设置进程数。
一个好的经验法则是每200 Mbps带宽分配一个进程
。
这可能会根据核心速度而有所不同。
注意:上述爬取在使用整个PublisherCollection
的情况下,在一台配备1000 Mbps连接、Core i9-13905H、64GB内存、Windows 11的机器上耗时约7小时,且不打印文章。
估计时间可能会根据使用的发布商和可用带宽而有很大差异。
此外,并非所有发布商都包含在CC-NEWS
爬虫中(尤其是美国的发布商)。
对于大规模语料库创建,也可以通过只使用网站地图来使用常规爬虫,这需要的带宽明显更少。
from fundus import PublisherCollection, Crawler, Sitemap
# 初始化美国/英国发布商的爬虫,并限制只使用网站地图
crawler = Crawler(PublisherCollection.us, PublisherCollection.uk, restrict_sources_to=[Sitemap])
# 爬取100万篇文章并打印
for article in crawler.crawl(max_articles=1000000):
print(article)
教程
我们提供快速教程帮助你开始使用这个库:
如果您想贡献,请查看以下教程:
当前支持的新闻来源
您可以在这里找到目前支持的出版商。
同时:添加新的出版商很简单 - 考虑为项目做出贡献!
评估基准
查看我们的评估基准。
爬虫 | 精确度 | 召回率 | F1得分 |
---|---|---|---|
Fundus | 99.89±0.57 | 96.75±12.75 | 97.69±9.75 |
Trafilatura | 90.54±18.86 | 93.23±23.81 | 89.81±23.69 |
BTE | 81.09±19.41 | 98.23±8.61 | 87.14±15.48 |
jusText | 86.51±18.92 | 90.23±20.61 | 86.96±19.76 |
news-please | 92.26±12.40 | 86.38±27.59 | 85.81±23.29 |
BoilerNet | 84.73±20.82 | 90.66±21.05 | 85.77±20.28 |
Boilerpipe | 82.89±20.65 | 82.11±29.99 | 79.90±25.86 |
引用
使用Fundus或基于我们的工作进行开发时,请引用以下论文:
@inproceedings{dallabetta-etal-2024-fundus,
title = "Fundus: A Simple-to-Use News Scraper Optimized for High Quality Extractions",
author = "Dallabetta, Max and
Dobberstein, Conrad and
Breiding, Adrian and
Akbik, Alan",
editor = "Cao, Yixin and
Feng, Yang and
Xiong, Deyi",
booktitle = "Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations)",
month = aug,
year = "2024",
address = "Bangkok, Thailand",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2024.acl-demos.29",
pages = "305--314",
}
联系方式
请将您的问题或意见发送邮件至Max Dallabetta
贡献
感谢您对贡献的兴趣!有很多方式可以参与进来; 从我们的贡献者指南开始,然后 查看这些未解决的问题以了解具体任务。