Python网页正文提取神器: readability库详解

Python网页正文提取神器: readability库详解

    • 1. readability简介
    • 2. 安装
    • 3. 基本使用
      • 3.1 提取文章内容
      • 3.2 获取元数据
    • 4. 高级功能
      • 4.1 自定义选项
      • 4.2 处理非标准HTML
    • 5. 实际应用示例
      • 5.1 批量提取新闻文章
      • 5.2 创建简单的阅读模式
    • 6. 性能优化
    • 7. 注意事项和局限性
    • 8. 总结

在网络爬虫和数据分析领域,我们经常需要从HTML页面中提取主要内容,去除广告、导航栏等无关元素。readability是一个强大的Python库,专门用于从HTML中提取文章的主要内容和元数据。本文将详细介绍readability库的使用方法和基本概念。

1. readability简介

readability-lxml是Mozilla开发的Readability.js的Python移植版本。它使用启发式算法来识别和提取网页中的主要内容,同时去除广告、侧边栏等干扰元素。

主要特点:

  • 从HTML中提取文章正文
  • 识别文章标题、作者、发布日期等元数据
  • 支持多种语言
  • 可以处理不规范的HTML

2. 安装

使用pip安装readability-lxml:

pip install readability-lxml

3. 基本使用

3.1 提取文章内容

from readability import Document
import requests# 获取网页内容
url = "https://example.com/article"
response = requests.get(url)
html_content = response.text# 创建Document对象
doc = Document(html_content)# 获取文章标题
title = doc.title()# 获取文章正文
content = doc.summary()print(f"标题: {title}")
print("正文:")
print(content)

3.2 获取元数据

# 获取文章短标题
short_title = doc.short_title()# 获取文章描述
description = doc.description()print(f"短标题: {short_title}")
print(f"描述: {description}")

4. 高级功能

4.1 自定义选项

readability允许你自定义一些参数来调整提取算法:

from readability import Documentoptions = {'min_text_length': 100,  # 最小文本长度'retry_length': 250,     # 重试时的最小长度'char_threshold': 500,   # 字符阈值'keep_classes': [],      # 保留的CSS类名'clean_conditionally': True,  # 是否进行条件清理'remove_empty_nodes': True,   # 是否移除空节点
}doc = Document(html_content, **options)
content = doc.summary()

4.2 处理非标准HTML

readability能够处理一些不太规范的HTML:

from readability import Document# 处理缺少closing tags的HTML
html = "<html><body><p>This is a paragraph<p>This is another paragraph</body></html>"
doc = Document(html)
content = doc.summary()
print(content)

5. 实际应用示例

5.1 批量提取新闻文章

import requests
from readability import Document
import csvdef extract_article(url):response = requests.get(url)doc = Document(response.text)return {'title': doc.title(),'content': doc.summary(),'url': url}urls = ["https://example.com/news1","https://example.com/news2","https://example.com/news3"
]articles = [extract_article(url) for url in urls]# 将结果保存到CSV文件
with open('articles.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=['title', 'content', 'url'])writer.writeheader()writer.writerows(articles)

5.2 创建简单的阅读模式

from flask import Flask, request, render_template_string
from readability import Document
import requestsapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])
def reader_mode():if request.method == 'POST':url = request.form['url']response = requests.get(url)doc = Document(response.text)title = doc.title()content = doc.summary()return render_template_string("""<h1>{{ title }}</h1>{{ content|safe }}""", title=title, content=content)return '''<form method="post">URL: <input type="text" name="url"><input type="submit" value="Read"></form>'''if __name__ == '__main__':app.run(debug=True)

6. 性能优化

对于大量网页的处理,可以考虑以下优化策略:

  1. 使用异步请求库如aiohttp来并发获取网页内容
  2. 使用多进程处理大量文章
  3. 将提取的内容缓存到数据库中,避免重复处理
import asyncio
import aiohttp
from readability import Document
from concurrent.futures import ProcessPoolExecutorasync def fetch(url, session):async with session.get(url) as response:return await response.text()def process_html(html):doc = Document(html)return doc.summary()async def extract_articles(urls):async with aiohttp.ClientSession() as session:html_contents = await asyncio.gather(*[fetch(url, session) for url in urls])with ProcessPoolExecutor() as executor:results = list(executor.map(process_html, html_contents))return resultsurls = ["https://example.com/article1", "https://example.com/article2", ...]
results = asyncio.run(extract_articles(urls))

7. 注意事项和局限性

  1. readability主要针对文章类型的网页,对于复杂的布局可能效果不佳。
  2. 某些动态加载的内容可能无法提取,需要结合其他技术如Selenium。
  3. 版权问题: 使用readability提取内容时要注意遵守网站的使用条款和版权法。
  4. 不同网站可能需要微调参数以获得最佳效果。

8. 总结

readability库为Python开发者提供了一个强大的工具,用于从HTML中提取文章的主要内容。它在网络爬虫、数据分析、内容聚合等场景中非常有用。

通过使用readability,我们可以:

  • 快速提取网页中的主要文章内容
  • 去除广告、导航栏等无关元素
  • 获取文章标题、作者等元数据
  • 创建阅读模式或内容聚合应用

虽然readability有一些限制,但对于大多数常见的文章提取任务来说,它已经足够强大和灵活。通过结合其他Python库(如requests、BeautifulSoup等),我们可以创建更加复杂和强大的网页内容提取系统。

在实际项目中,readability可以大大简化从网页中提取有用信息的过程,提高数据处理的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高精度实验】PFA具塞试管 四氟塞子 实验室分析专用

PFA具塞试管&#xff0c;以其四氟塞子的卓越密封性能&#xff0c;为实验室的精确度和安全性提供了双重保障。以下是针对PFA具塞试管的营销文案&#xff0c;特别强调其四氟塞子的特性&#xff1a; 【四氟密封&#xff0c;科研无忧】 在追求极致精确的科研世界里&#xff0c;PF…

安华金和—可信数据空间助力公共数据授权运营安全有序开展的实践探索

伴随数字化、网络化和智能化的快速发展&#xff0c;数字经济与实体经济深度融合&#xff0c;数据已然成为经济发展赖以依托的基础性、战略性资源&#xff0c;对社会生产、分配、流通、消费和社会服务管理等各环节产生深刻影响。我国高度重视数字经济发展&#xff0c;将数据列入…

14-21 人工智能的历史以及简单神经网络的工作原理

初始 “我们需要走得更深”这句台词出自电影《盗梦空间》。这是在讨论深入梦境更深层次时说的&#xff0c;暗示需要探索梦境的更深层次。虽然这似乎是不可能的&#xff0c;但它传达的理念是&#xff0c;要创造一个新的世界&#xff0c;就必须冒险进入更深的层次。 电影《盗梦空…

3D问界—MAYA中冻结变化的作用以及应用的场景

问题提出&#xff1a;MAYA中冻结变化的作用以及应用的场景 在Maya中&#xff0c;“冻结变换”&#xff08;Freeze Transformations&#xff09;的作用是重置对象的变换属性&#xff0c;包括平移、旋转和缩放&#xff0c;将它们归零或者设定为特定的值。这通常在以下几个步骤中需…

unity强力配置插件Luban【Next最新版本】(二)本地化

文章目录 前言一、快速实现静态本地化1、表格格式2、本地化文本3、修改bat文件3、打表 二、多语言切换1、修改bat文件2、增加本地化管理脚本3、测试 总结 前言 无需多言&#xff0c;本地化&#xff08;Localization&#xff0c;简称 L10N&#xff09;是指将产品、内容或服务适…

软考的报名详细流程

2024年软考的考试时间已经公布&#xff0c;分别为5月25日至28日和11月9日至12日。准备参加2024年软考的朋友们&#xff0c;一定要提前关注官方发布的考试安排。 本文将详细介绍软考报考的整个流程。准备报考的朋友们&#xff0c;阅读本文就足够啦&#xff01;软考的报考流程大致…

【CT】LeetCode手撕—1143. 最长公共子序列

目录 题目1- 思路2- 实现⭐1143. 最长公共子序列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;1143. 最长公共子序列 1- 思路 模式识别&#xff1a;最长公共子序列——> 动规五部曲 2- 实现 ⭐1143. 最长公共子序列——题解思路 class Solution {public int longe…

2024上半年网络工程师考试《应用技术》试题一

阅读以下说明&#xff0c;回答问题。 【说明】 MPLS基于(1)进行转发&#xff0c;进行MPLS标签交换和报文转发的网络设备称为(2)&#xff0c;构成MPLS域(MPSDomain)。位于MPLS域边缘、连接其他网络的LSR称为(3),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时&#xf…

LLM4Decompile——专门用于反编译的大规模语言模型

概述 论文地址&#xff1a;https://arxiv.org/abs/2403.05286 反编译是一种将已编译的机器语言或字节码转换回原始高级编程语言的技术。该技术用于分析软件的内部工作原理&#xff0c;尤其是在没有源代码的情况下&#xff1b;Ghidra 和 IDA Pro 等专用工具已经开发出来&#…

等保2.0 实施方案

一、引言 随着信息技术的广泛应用&#xff0c;网络安全问题日益突出&#xff0c;为确保信息系统安全、稳定、可靠运行&#xff0c;保障国家安全、公共利益和个人信息安全&#xff0c;根据《网络安全法》及《信息安全技术 网络安全等级保护基本要求》&#xff08;等保2.0&#x…

实验七 SQL数据更新和视图

题目 &#xff08;1&#xff09;向商品类别表category中插入一条记录&#xff08;801&#xff0c;‘座椅套’&#xff0c;‘各种品牌的汽车座套’&#xff09; &#xff08;2&#xff09;向商品表product中插入一条记录&#xff1a;商品编号80101&#xff0c;商品名称“四季通…

【HDC.2024】探索无限可能:华为云区块链+X,创新融合新篇章

6月23日&#xff0c;华为开发者大会2024&#xff08;HDC 2024&#xff09;期间&#xff0c; “「区块链X」多元行业场景下的创新应用”分论坛在东莞松山湖举行&#xff0c;区块链技术再次成为焦点。本次论坛以"区块链X"为主题&#xff0c;集结了行业专家、技术领袖、…

【Linux】虚拟机安装 openEuler 24.03 X86_64

目录 一、概述 1.1 openEuler 覆盖全场景的创新平台 1.2 系统框架 1.3 平台框架 二、安装详细步骤 一、概述 1.1 openEuler 覆盖全场景的创新平台 openEuler 已支持 x86、Arm、SW64、RISC-V、LoongArch 多处理器架构&#xff0c;逐步扩展 PowerPC 等更多芯片架构支持&…

超声波气象站的工作原理

TH-CQX5超声波气象站中的超声波技术是其核心工作原理之一&#xff0c;以下是关于超声波气象站中超声波的详细解释&#xff1a;超声波是一种频率高于人耳能听到的声音频率范围的声波&#xff0c;通常指频率在20kHz以上的声波。超声波具有较短的波长和强的穿透能力&#xff0c;能…

手把手家教你进行ChatGPT私有化部署

背景 随着AI技术的不断成熟&#xff0c;加上ChatGPT如火如荼的发布新版本迭代更新&#xff0c;人工智能的热度也升温到史无前例的高度。 我们有理由相信&#xff0c;现在身边还不愿主动去接触这项技术&#xff0c;深入了解的小伙伴&#xff0c;在不久的将来&#xff0c;一定会…

二手物品交易小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;商品信息管理&#xff0c;论坛管理&#xff0c;收货地址管理&#xff0c;基础数据管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&…

晨持绪科技:抖音店铺运营思路

在抖音这个充满活力与创意的平台上&#xff0c;店铺运营不仅仅是一种商业行为&#xff0c;它更是一种艺术的展示。如同画家在画布上勾勒出色彩斑斓的画面&#xff0c;抖音店铺的运营者们也在平台上精心策划着每一个细节&#xff0c;以吸引更多的目光和流量。 内容创作。内容是吸…

工程师 - 什么是SMP

什么是 SMP&#xff08;对称多处理&#xff09;&#xff1f; What is SMP (symmetric multiprocessing)? 对称多处理&#xff08;SMP&#xff0c;symmetric multiprocessing&#xff09;是由多个处理器完成的计算机处理过程&#xff0c;这些处理器共享一个操作系统&#xff0…

新加坡博士申请|中国社科院-新加坡社科大学联合培养工商管理博士

新加坡博士申请|中国社科院-新加坡社科大学联合培养工商管理博士 【项目名称】中国社会科学院大学与新加坡新跃社科大学工商管理博士项目 【学制】最短3年&#xff0c;最长不超过7年 【学位证书】新加坡新跃社科大学工商管理博士学位 【招生对象】企业高管、咨询顾问及其他有…

我在高职教STM32——时钟系统与延时控制(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…