当前位置: 首页 > news >正文

github项目--crawl4ai

github项目--crawl4ai

    • 输出html
    • 输出markdown格式
    • 输出结构化数据
    • 与BeautifulSoup的对比

crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下

这里我们使用crawl4ai抓取github每日趋势,每天通过邮件发到自己邮箱

输出html

async def github_trend_html():async with AsyncWebCrawler(verbose=True) as crawler:result = await crawler.arun(url="https://github.com/trending",)assert result.success, "github 数据抓取失败"return result.cleaned_html

输出的还是html,但对原始页面做了处理,比如移除不相关元素,动态元素,简化html结构。

在这里插入图片描述

输出markdown格式

async def github_trend_md():async with AsyncWebCrawler(verbose=True) as crawler:result = await crawler.arun(url="https://github.com/trending",)assert result.success, "github 数据抓取失败"return result.markdown

用md软件打开看一下效果:

在这里插入图片描述

输出结构化数据

async def github_trend_json():schema = {"name": "Github trending","baseSelector": ".Box-row","fields": [{"name": "repository","selector": ".lh-condensed a[href]","type": "text",},{"name": "description","selector": "p","type": "text",},{"name": "lang","type": "text","selector": "span[itemprop='programmingLanguage']",},{"name": "stars","type": "text","selector": "a[href*='/stargazers']"},{"name": "today_star","type": "text","selector": "span.float-sm-right",},],}extraction_strategy = JsonCssExtractionStrategy(schema, verbose=True)async with AsyncWebCrawler(verbose=True) as crawler:result = await crawler.arun(url="https://github.com/trending",extraction_strategy=extraction_strategy,bypass_cache=True,)assert result.success, "github 数据抓取失败"github_trending_json = json.loads(result.extracted_content)for ele in github_trending_json:ele['repository'] = 'https://github.com/' + ''.join(ele['repository'].split())return github_trending_json

与前两种不同的是,结构化输出需要通过自定义schema来定义解析的数据结构。控制台按照我们定义的schema输出了标准了JSON数据。将数据放入html模版,通过邮件每日发送。看一下邮件显示:

在这里插入图片描述

与BeautifulSoup的对比

记得第一次用soup的时候,对于只用过Java sax解析xml的我来说,soup真的太方便了。今天简单测试了下crawl4ai,和soup相比

  • crawl4ai数据采集分析更方便
  • soup需要配合使用request进行网页抓取,BeautifulSoup负责html解析
  • html解析有点类似,都是通过CSS选择器,但crawl4ai通过定义schema,解析更方便
  • 数据解析方面,crawl4ai除了提供了markdown和简化版的html,还提供了通过集成OpenAI提取结构化数据的能力(尚未体验)

相关文章:

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…...

仅有N卡独显的情况下安装ubuntu是遇到的黑屏,加载卡顿等问题

Ubuntu安装的两个阶段都要进行一定的设置来临时禁用掉独显或者ubuntu的通用显卡驱动。 U盘启动阶段 U盘启动阶段要对U盘启动项进行设置,通过BIOS设置第一boot为USB hard disk后可以进到U盘引导项,第一项为 “try or install ubuntu”,倒计时10s后自动进入。 这个时候不要…...

Vite:为什么选 Vite

一、现实问题 在浏览器支持 ES 模块之前,JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们对 “打包” 这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运行的文件。 时过境迁,我…...

个人项目简单https服务配置

1.SSL简介 SSL证书是一种数字证书,由受信任的证书颁发机构(CA)颁发,用于在互联网通信中建立加密链接。SSL代表“安全套接层”,是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性…...

Rust 函数

Rust 函数 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。函数是 Rust 编程语言中的基本构建块,用于封装可重用的代码块。本文将深入探讨 Rust 中的函数,包括其定义、特性、参数、返回值以及高级概念。 函数定义 在 Rust 中&a…...

微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器

微信小程序中的 <block> 元素&#xff1a;高效渲染与结构清晰的利器 在微信小程序的开发中&#xff0c;<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点&#xff0c;但作为一个逻辑上的容器&#xff0c;<block> 在条件渲染和循环渲…...

选读算法导论5.2 指示器随机变量

为了分析包括包括雇佣分析在内的许多算法&#xff0c;我们将使用指示器随机变量&#xff0c;它为概率和期望之间的转换提供了一个便利的方法&#xff0c;给定一个样本空间S和事件A&#xff0c;那么事件A对应的指示器随机变量&#xff1a; Xa 1 如果A发生    0 如果…...

大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

centos9 nginx 版本

centos9 安装 ssh -V OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024 openssl version OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024) sudo yum install nginx Installing:nginx x86_64 2:1.20.1…...

https访问报错:net::ERR_CERT_DATE_INVALLD

目录 简介异常排查原因解决补充 简介 访问https资源出现报错 异常 排查 将地址拿到浏览器进行访问&#xff0c;可以很清晰的看到出现该问题的原因 原因 1、SSL证书已过期 2、服务器日期不准&#xff0c;不在证书有效期 解决 1、重新申请SSL证书&#xff0c;并配置 2、校正…...

cat用来查看文件内容、合并文件,或者将文件内容输出到终端

cat 是 Unix 和 Linux 系统中的一个命令&#xff0c;它的名称来源于 “concatenate”&#xff08;连接&#xff09;&#xff0c;主要用来查看文件内容、合并文件&#xff0c;或者将文件内容输出到终端。 常用用法 查看文件内容 cat filename输出 filename 的内容到终端中。 例…...

基于ssm大学生自主学习网站的设计与实现

文未可获取一份本项目的java源码和数据库参考。 1、毕业论文&#xff08;设计&#xff09;的背景及意义&#xff1a; &#xff08;1&#xff09;研究背景 目前&#xff0c;因特网是世界上最大的计算机互联网络&#xff0c;它通过网络设备将世界各地互相独立的不同规模的局域…...

C++基础补充(01)C++11基于范围的for循环

文章目录 1. 基本语法1.1 decalaration默认获取值引用&自动类型推导&#xff08;auto&#xff09; 1.2 container数组STL容器初始化列表自定义类型返回容器的函数 2. 其他示例2.1 遍历数组2.2 遍历vector&#xff0c;并修改元素2.3 使用常量引用遍历&#xff0c;防止容器中…...

qt6 使用QPSQL

检查可用的数据库驱动&#xff1a; // iteator all database driverQStringList drivers QSqlDatabase::drivers();QStringList::iterator it;for (it drivers.begin(); it ! drivers.end(); it){qDebug() << *it;} qt6 自带pg数据库驱动&#xff1a; pro文件加个说明&…...

【PostgreSQL】提高篇——公用表表达式(CTE)和窗口函数

在这篇文章中&#xff0c;我将详细介绍 PostgreSQL 中的公用表表达式&#xff08;CTE&#xff09;和窗口函数&#xff0c;帮助你理解如何使用它们进行复杂的数据分析。我将通过具体的示例来演示这些概念的实际应用&#xff0c;并在每个示例中提供详细的解释和注释。 1. 公用表…...

【min25筛】【CF2020F】Count Leaves

题目 定义 f ( n , 0 ) 1 f(n,0)1 f(n,0)1&#xff0c; f ( n , d ) ∑ k ∣ n f ( k , d − 1 ) f(n,d)\sum_{k|n}f(k,d-1) f(n,d)∑k∣n​f(k,d−1) 给出 n , k , d n,k,d n,k,d&#xff0c;你需要求出: ∑ i 1 n f ( i k , d ) m o d ( 1 0 9 7 ) \sum_{i1}^n f(i^k…...

【d57】【sql】1661. 每台机器的进程平均运行时间

思路 一方面考察自连接&#xff0c;另一方面考察group by 这里主要说明 group by 用法&#xff1a; 1.在 SQL 查询中&#xff0c;GROUP BY 子句用于将结果集中的行分组&#xff0c;目的通常就是 对每个组应用聚合函数&#xff08;如 SUM(), AVG(), MAX(), MIN(), COUNT() 等…...

ArcGIS共享数据的最佳方法(不丢可视化、标注等各类显示信息一样带)

今天我们介绍一下ArcGIS数据共享的几个小妙招 我们时常要把数据发给对方&#xff0c;特别是很多新手朋友要将shp发给对方时只是发送了shp后缀的文件&#xff0c;却把shp的必要组成文件dbf、shx等等给落下了。 还有很多朋友给图层做好了符号化标注&#xff0c;但是数据一发给别…...

小程序this.getOpenerEventChannel()当前页面与navigateTo页面之间数据通信

this.getOpenerEventChannel() 是微信小程序中获取页面打开它的页面事件通道的方法。但是&#xff0c;这个方法只在页面是被wx.navigateTo打开的情况下才能使用。如果页面是通过其他方式打开的&#xff0c;比如wx.redirectTo&#xff0c;那么就无法使用这个方法。 解决方案&…...

调用飞书接口导入供应商bug

1、业务背景 财务这边大部分系统都是供应商项目&#xff0c;由于供应商的研发人员没有飞书项目的权限&#xff0c;涉及到供应商系统需求 财务这边都是通过多维表格进行bug的生命周期管理如图&#xff1a; 但多维表格没有跟飞书项目直接关联&#xff0c;测试组做bug统计的时候无…...

Codex入门09-Git工作流(小白入门:不会写commit信息?AI帮你自动生成规范提交)

🎯 本文目标 学会用 Codex 自动化 Git 操作:提交、冲突解决、PR 描述生成。 😰 Git 新手的典型痛点 你的提交记录是不是这样的: git log --oneline a3f4b2c fix 9d1e8c4 update 4c7b91f 修改了一些东西 f0a2d3e 。。。 b5c8e7a 又改了这就是"屎山提交记录"—…...

新媒体编辑提效:OpenClaw批量剪辑短视频、生成文案字幕,适配多平台发布规则

新媒体编辑效率革命&#xff1a;OpenClaw赋能短视频批量剪辑、智能文案生成与多平台适配在信息爆炸、注意力稀缺的移动互联网时代&#xff0c;短视频已成为内容传播的绝对主力军。对于新媒体运营团队而言&#xff0c;高效地产出高质量、符合各平台调性且能快速发布的短视频内容…...

别再只会点灯了!用51单片机和继电器模块,做个智能插座控制台灯(附完整代码)

从点灯到智能家居&#xff1a;51单片机与继电器模块的实战进阶指南 当你已经能够熟练地用51单片机点亮LED灯时&#xff0c;是否想过将这些基础技能转化为实际生活中的实用工具&#xff1f;本文将带你跨越实验板与真实世界的鸿沟&#xff0c;用最常见的51单片机和继电器模块&…...

基于图特征选择与XGBoost的电动公交预测性维护模型构建

1. 项目概述&#xff1a;从数据洪流到精准预警的挑战在电动公交的日常运营中&#xff0c;车辆控制器局域网&#xff08;CAN&#xff09;总线每秒都在产生海量的传感器数据&#xff0c;从电池电压、电机温度到刹车片厚度&#xff0c;这些数据流如同车辆的“生命体征”。预测性维…...

AI模型评估实战:从原理到实践,用Evaliphy简化评测全流程

1. 项目概述&#xff1a;当AI测试遇上“简化”难题最近和几个做AI应用开发的朋友聊天&#xff0c;大家不约而同地提到了同一个痛点&#xff1a;模型效果评估太折腾了。这让我想起自己去年折腾一个文本分类项目时的经历——为了评估模型在几个不同测试集上的表现&#xff0c;我写…...

当1000A牵引电流遇上微安级信号:高铁轨道电路中扼流变压器的‘抗干扰’实战解析

高铁轨道电路中扼流变压器的抗干扰设计与工程实践 电气化铁路的轨道电路系统面临着前所未有的电磁兼容挑战——如何在承载1000A级牵引电流的钢轨上&#xff0c;同时可靠传输微安级的信号电流&#xff1f;这个看似矛盾的需求&#xff0c;正是现代高铁信号系统设计的核心难题之一…...

clawhealth:本地化Garmin健康数据同步与自动化分析工具实践

1. 项目概述&#xff1a;打造你的本地健康数据中心如果你和我一样&#xff0c;手腕上常年戴着一块Garmin手表&#xff0c;每天看着它记录步数、心率、睡眠&#xff0c;但总觉得这些数据只是躺在Garmin Connect的云端&#xff0c;自己没法真正“拥有”和分析&#xff0c;那么cla…...

怎么降维普AI率到30%以下?本科合格区间实战完整路径方案!

怎么降维普AI率到30%以下&#xff1f;本科合格区间实战完整路径方案&#xff01; 本科生维普 AI 率合格线 30%&#xff0c;比硕博严标准 15% 宽松一倍。但如果你的论文 AI 率 60% 重灾区&#xff0c;降到 30% 以下还是需要工具。你的真实情况是什么&#xff1f; 本科 4-5 万字论…...

观察Taotoken Token Plan套餐在长期项目中的成本控制效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken Token Plan套餐在长期项目中的成本控制效果 对于需要长期、稳定调用大模型API的项目而言&#xff0c;成本的可预测性…...

Cursor插件实现网页数据AI就绪:从智能抓取到实时搜索的完整方案

1. 项目概述&#xff1a;将任意网页转化为AI就绪数据的Cursor插件 如果你经常用Cursor写代码、做研究&#xff0c;或者处理网络数据&#xff0c;那你肯定遇到过这样的场景&#xff1a;看到一个网页&#xff0c;想把里面的内容扒下来&#xff0c;整理成结构化的Markdown或者JSO…...