用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。

1. 安装 Faraday
如果你还没有安装 Faraday,可以通过 gem 来安装:
gem install faraday
或者如果你使用 Bundler,你可以将其添加到你的 Gemfile 中:
gem 'faraday'
然后运行:
bundle install
2. 使用 Faraday 发送 HTTP 请求
以下是使用 Faraday 库的基本示例:
(1) 导入 Faraday
首先,你需要导入 Faraday 库:
require 'faraday'
(2) 发送 GET 请求
如果你想发送一个 GET 请求来抓取数据(例如从某个 API 或网站获取内容),可以使用以下代码:
# 创建一个 Faraday 客户端
conn = Faraday.new(url: 'https://jsonplaceholder.typicode.com')# 发送 GET 请求,获取一个假数据 API
response = conn.get('/posts/1')# 打印响应状态码
puts "Status: #{response.status}"# 打印响应体内容
puts "Body: #{response.body}"
在这个例子中,我们使用 Faraday.new 创建了一个 conn 对象,设置了请求的基础 URL。然后,使用 get 方法发送一个 GET 请求,获取 JSON 数据。
response.status:打印 HTTP 响应状态码(例如200表示成功)。response.body:打印响应体内容,这是返回的实际数据。
(3) 处理 JSON 数据
如果响应体是 JSON 格式的数据,你可以使用 JSON 库解析它:
require 'faraday'
require 'json'conn = Faraday.new(url: 'https://jsonplaceholder.typicode.com')
response = conn.get('/posts/1')# 将响应体转换为 Ruby 哈希
data = JSON.parse(response.body)# 打印返回的数据
puts data
JSON.parse 方法将 JSON 字符串解析为 Ruby 哈希,方便你进一步操作数据。
(4) 发送 POST 请求
如果你需要发送 POST 请求,可以这样做:
# 创建一个 Faraday 客户端
conn = Faraday.new(url: 'https://jsonplaceholder.typicode.com')# 发送 POST 请求,模拟创建一个新的帖子
response = conn.post('/posts') do |req|req.headers['Content-Type'] = 'application/json'req.body = { title: 'foo', body: 'bar', userId: 1 }.to_json
end# 打印响应状态码和返回数据
puts "Status: #{response.status}"
puts "Response Body: #{response.body}"
这里我们使用 conn.post 来发送 POST 请求,并设置请求头和请求体。请求体通过 to_json 方法转化为 JSON 格式。
(5) 设置请求头
你可以在请求中设置各种 HTTP 请求头,例如 User-Agent 或 Authorization 头。比如:
# 创建 Faraday 客户端
conn = Faraday.new(url: 'https://jsonplaceholder.typicode.com') do |faraday|faraday.adapter Faraday.default_adapter
end# 发送带有请求头的 GET 请求
response = conn.get('/posts/1') do |req|req.headers['User-Agent'] = 'MyRubyClient/1.0'
end# 打印响应内容
puts response.body
(6) 处理错误
你可以通过 rescue 来捕获错误,确保程序不会因为请求失败而崩溃。例如,捕获 Faraday::ConnectionFailed 错误:
beginresponse = conn.get('/nonexistent_path')puts response.body
rescue Faraday::ConnectionFailed => eputs "Connection failed: #{e.message}"
end
3. 完整示例:抓取并解析网页内容
假设你想抓取一个网页的 HTML 内容并解析其中的一部分。下面是一个完整的示例,使用 Faraday 获取网页内容并使用 Nokogiri 解析它。
首先,安装 nokogiri(如果还没有安装):
gem install nokogiri
然后,你可以编写如下代码:
require 'faraday'
require 'nokogiri'# 创建 Faraday 客户端
conn = Faraday.new(url: 'https://www.example.com')# 获取网页 HTML 内容
response = conn.get# 解析 HTML 内容
doc = Nokogiri::HTML(response.body)# 查找网页中的所有 <h1> 元素
doc.css('h1').each do |h1|puts h1.text
end
在这个例子中,我们使用 Nokogiri::HTML 解析 HTML 内容,并查找所有的 <h1> 标签,将其文本输出到控制台。
4. 总结
通过 Faraday 库,我们可以非常方便地发送 HTTP 请求(包括 GET、POST 请求),抓取数据,并进行处理。你可以根据具体需求进一步调整请求参数、处理响应数据,以及处理错误。
主要功能:
- 发送 GET 和 POST 请求
- 处理 JSON 和 HTML 响应
- 设置请求头
- 错误处理
Faraday 是一个功能强大且灵活的 HTTP 客户端库,非常适合用于抓取数据、与 API 进行交互等任务。
相关文章:
用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...
Ubuntu的软件源
百度搜索 ubuntu清华镜像源 根据下面的网页,选择对应Ubuntu操作系统的源,一定要对应!!! https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial,这时就一定要使用16.04 xenial的源 …...
笔记五:C语言编译链接
Faye:孤独让我们与我们所爱的人相处的每个瞬间都无比珍贵,让我们的回忆价值千金。它还驱使你去寻找那些你在我身边找不到的东西。 ---------《寻找天堂》 目录 一、编译和链接的介绍 1.1 程序的翻译环境和执行环境 1.1.1 翻译环境 1.1.2 运行环境 …...
GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程
源码仓库: https://gitcode.com/youlai/vue3-element-admin 后端仓库: https://gitcode.com/youlai/youlai-boot 开源助力,开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板,它紧密贴合…...
SyntaxError: Invalid regular expression flag “x“
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
HiveServer2与Spark ThriftServer详细介绍对比
HiveServer2与Spark ThriftServer详细介绍对比 1、概述 1.1 HiveServer2 是 Apache Hive 提供的基于 Thrift 的服务进程,用于让远程客户端执行 Hive SQL 查询 ([一起了解一下HiveServer2 - zourui4271 - 博客园]。它是早期 HiveServer1 的改进版本,引入…...
ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
1.开发板配置 本人开发板使用ESP32S3-wroom1-n16r8最小系统板 由于基于vscode与PlatformIO框架开发,无espidf框架,因此无法直接烧录程序,配置开发板参数如下: 在platformio.ini文件中,配置使用esp32-s3-devkitc-1开发…...
软考初级程序员知识点汇总
以下是计算机技术与软件专业技术资格(水平)考试(简称“软考”)中 程序员(初级) 考试的核心知识点汇总,涵盖考试大纲的主要方向,帮助你系统复习: 一、计算机基础 计算机组…...
亲测解决笔记本触摸板使用不了Touchpad not working
这个问题可以通过FnFxx来解决,笔记本键盘上Fxx会有一个触摸板图标。如果不行应该玉藻设置中关了,打开即可。 解决办法 在蓝牙,触摸板里打开即可。 Turn it on in settings。...
13.数据结构(软考)
13.数据结构(软考) 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的,即在使用数组之前需要分配固定大小的空间。 时间复杂度: 读:O(1) 查询:1,(n1)/2&#x…...
开发环境搭建-完善登录功能
一.完善登录功能 我们修改密码为md5中的格式,那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式,然后进行比对。比对成功则登录成功,失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密,调用md4Dig…...
HAL库,配置adc基本流程
1. 初始化阶段---cubemx (1) GPIO初始化 函数:HAL_GPIO_Init() 作用:配置ADC引脚为模拟输入模式。 代码示例: // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 配置PA1为模拟输入 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStr…...
DeepSeek爆火催生培训热潮,是机遇还是陷阱?
DeepSeek 掀起的学习风暴 最近,DeepSeek 以迅猛之势闯入大众视野,在国内引发了一场学习狂潮。它的出现,就像是在平静的湖面投入了一颗巨石,激起层层涟漪。 在各大社交平台上,与 DeepSeek 相关的话题讨论热度居高不下&…...
Apache Httpd 多后缀解析
目录 1.原因 2.环境 3.复现 4.防御 1.Apache Httpd 多后缀解析原因 Apache HTTP Server 在处理文件请求时,通常会根据文件的后缀来确定如何处理该文件。例如,.php文件会被交给 PHP 解释器处理,而.html文件则直接作为静态文件返回。 然而…...
备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...
css错峰布局/瀑布流样式(类似于快手样式)
当样式一侧比较高的时候会自动换行,尽量保持高度大概一致, 例: 一侧元素为5,另一侧元素为6 当为5的一侧过于高的时候,可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...
【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析
ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池,主要有四种方式,具体可以看代码, 这里主要描述下 scheduleAtFixedRate : 除了第一次执行的时间,后面任务执行的时间 为 time MAX(任务执行时…...
【虚拟化】Docker Desktop 架构简介
在阅读前您需要了解 docker 架构:Docker architecture WSL 技术:什么是 WSL 2 1.Hyper-V backend 我们知道,Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...
DeepSeek 医疗大模型微调实战讨论版(第一部分)
DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
