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

用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-AgentAuthorization 头。比如:

# 创建 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 中&#xff0c;Faraday 是一个非常强大的 HTTP 客户端库&#xff0c;它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据&#xff0c;处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求&#xff0c;抓取数据并处理响应。 1.…...

Ubuntu的软件源

百度搜索 ubuntu清华镜像源 根据下面的网页&#xff0c;选择对应Ubuntu操作系统的源&#xff0c;一定要对应&#xff01;&#xff01;&#xff01; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial&#xff0c;这时就一定要使用16.04 xenial的源 …...

笔记五:C语言编译链接

Faye&#xff1a;孤独让我们与我们所爱的人相处的每个瞬间都无比珍贵&#xff0c;让我们的回忆价值千金。它还驱使你去寻找那些你在我身边找不到的东西。 ---------《寻找天堂》 目录 一、编译和链接的介绍 1.1 程序的翻译环境和执行环境 1.1.1 翻译环境 1.1.2 运行环境 …...

GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程

源码仓库&#xff1a; https://gitcode.com/youlai/vue3-element-admin 后端仓库&#xff1a; https://gitcode.com/youlai/youlai-boot 开源助力&#xff0c;开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板&#xff0c;它紧密贴合…...

SyntaxError: Invalid regular expression flag “x“

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

HiveServer2与Spark ThriftServer详细介绍对比

HiveServer2与Spark ThriftServer详细介绍对比 1、概述 1.1 HiveServer2 是 Apache Hive 提供的基于 Thrift 的服务进程&#xff0c;用于让远程客户端执行 Hive SQL 查询 ([一起了解一下HiveServer2 - zourui4271 - 博客园]。它是早期 HiveServer1 的改进版本&#xff0c;引入…...

ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)

1.开发板配置 本人开发板使用ESP32S3-wroom1-n16r8最小系统板 由于基于vscode与PlatformIO框架开发&#xff0c;无espidf框架&#xff0c;因此无法直接烧录程序&#xff0c;配置开发板参数如下&#xff1a; 在platformio.ini文件中&#xff0c;配置使用esp32-s3-devkitc-1开发…...

软考初级程序员知识点汇总

以下是计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称“软考”&#xff09;中 程序员&#xff08;初级&#xff09; 考试的核心知识点汇总&#xff0c;涵盖考试大纲的主要方向&#xff0c;帮助你系统复习&#xff1a; 一、计算机基础 计算机组…...

亲测解决笔记本触摸板使用不了Touchpad not working

这个问题可以通过FnFxx来解决&#xff0c;笔记本键盘上Fxx会有一个触摸板图标。如果不行应该玉藻设置中关了&#xff0c;打开即可。 解决办法 在蓝牙&#xff0c;触摸板里打开即可。 Turn it on in settings。...

13.数据结构(软考)

13.数据结构&#xff08;软考&#xff09; 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的&#xff0c;即在使用数组之前需要分配固定大小的空间。 时间复杂度&#xff1a; 读&#xff1a;O(1) 查询&#xff1a;1&#xff0c;(n1)/2&#x…...

开发环境搭建-完善登录功能

一.完善登录功能 我们修改密码为md5中的格式&#xff0c;那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式&#xff0c;然后进行比对。比对成功则登录成功&#xff0c;失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密&#xff0c;调用md4Dig…...

HAL库,配置adc基本流程

1. 初始化阶段---cubemx (1) GPIO初始化 函数&#xff1a;HAL_GPIO_Init() 作用&#xff1a;配置ADC引脚为模拟输入模式。 代码示例&#xff1a; // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 配置PA1为模拟输入 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStr…...

DeepSeek爆火催生培训热潮,是机遇还是陷阱?

DeepSeek 掀起的学习风暴 最近&#xff0c;DeepSeek 以迅猛之势闯入大众视野&#xff0c;在国内引发了一场学习狂潮。它的出现&#xff0c;就像是在平静的湖面投入了一颗巨石&#xff0c;激起层层涟漪。 在各大社交平台上&#xff0c;与 DeepSeek 相关的话题讨论热度居高不下&…...

Apache Httpd 多后缀解析

目录 1.原因 2.环境 3.复现 4.防御 1.Apache Httpd 多后缀解析原因 Apache HTTP Server 在处理文件请求时&#xff0c;通常会根据文件的后缀来确定如何处理该文件。例如&#xff0c;.php文件会被交给 PHP 解释器处理&#xff0c;而.html文件则直接作为静态文件返回。 然而…...

备赛蓝桥杯之第十五届职业院校组省赛第五题:悠然画境

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

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错峰布局/瀑布流样式(类似于快手样式)

当样式一侧比较高的时候会自动换行&#xff0c;尽量保持高度大概一致&#xff0c; 例&#xff1a; 一侧元素为5&#xff0c;另一侧元素为6 当为5的一侧过于高的时候&#xff0c;可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...

【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析

ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池&#xff0c;主要有四种方式&#xff0c;具体可以看代码&#xff0c; 这里主要描述下 scheduleAtFixedRate &#xff1a; 除了第一次执行的时间&#xff0c;后面任务执行的时间 为 time MAX(任务执行时…...

【虚拟化】Docker Desktop 架构简介

在阅读前您需要了解 docker 架构&#xff1a;Docker architecture WSL 技术&#xff1a;什么是 WSL 2 1.Hyper-V backend 我们知道&#xff0c;Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...

DeepSeek 医疗大模型微调实战讨论版(第一部分)

DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...

CompressO:终极跨平台视频图片压缩神器,轻松解决存储难题

CompressO&#xff1a;终极跨平台视频图片压缩神器&#xff0c;轻松解决存储难题 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/…...

火灾动力学模拟实战:如何用FDS构建精准的火灾预测系统

火灾动力学模拟实战&#xff1a;如何用FDS构建精准的火灾预测系统 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 你是否曾面临这样的困境&#xff1a;当设计一栋大型商业建筑时&#xff0c;如何科学评估火灾时的人员疏…...

KMS智能激活终极指南:如何一键永久激活Windows和Office

KMS智能激活终极指南&#xff1a;如何一键永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;每次重装系统后都要重新激活Office&…...

量化部署终极指南:从GPTQ到AWQ,精度损失与显存节省的平衡艺术

系列导读 你现在看到的是《本地大模型私有化部署与优化:从入门到生产级实战》的第 7/10 篇,当前这篇会重点解决:帮你搞懂每种量化方法的优劣,用最少显存跑最大模型,精度损失可控。 上一篇回顾:第 6 篇《RAG知识库实战:LangChain+Chroma搭建本地问答系统,解决幻觉与知…...

如何让Photoshop图层批量导出速度提升3倍?这个开源脚本做到了!

如何让Photoshop图层批量导出速度提升3倍&#xff1f;这个开源脚本做到了&#xff01; 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Ado…...

如何用Kafka-King轻松管理Kafka集群:5分钟上手完整指南

如何用Kafka-King轻松管理Kafka集群&#xff1a;5分钟上手完整指南 【免费下载链接】Kafka-King A modern and practical kafka GUI client &#x1f495;&#x1f389;Kafka-King 是一款现代化、实用的 Kafka GUI 客户端&#xff0c;旨在通过直观的桌面界面简化 Apache Kafka …...

GitHub宝藏项目:生成式AI公司全景导航图与实战应用指南

1. 项目概述&#xff1a;一份AI创业公司的全景导航图最近在GitHub上闲逛&#xff0c;发现了一个宝藏仓库&#xff0c;名字叫“awesome-generative-ai-companies”。这个项目&#xff0c;说白了&#xff0c;就是一个由社区驱动的、持续更新的生成式AI公司名录。它不像那些商业咨…...

嘎嘎降AI和PaperRR深度对比:2026年学术期刊SCI论文降AI性能完整评测报告

嘎嘎降AI和PaperRR深度对比&#xff1a;2026年学术期刊SCI论文降AI性能完整评测报告 总有人问我选哪个降AI工具&#xff0c;这篇文章把主流的几款对比清楚。 综合推荐嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;99.26%达标率。不同需求…...

CANoe VN1640A的隐藏技能:CH5 I/O口实战应用,从采集电压到模拟传感器信号

CANoe VN1640A的CH5 I/O接口深度实战&#xff1a;从电压采集到传感器信号模拟 1. 揭开CH5接口的神秘面纱 在汽车电子测试领域&#xff0c;Vector的VN1640A接口模块以其稳定性和多功能性著称。大多数工程师熟悉其CAN/LIN通道的使用&#xff0c;却常常忽略了一个隐藏的宝藏——…...

为什么你的旁遮普语语音听起来像“机械诵经”?ElevenLabs隐藏参数`stability=0.35`+`similarity_boost=0.72`调优公式首次披露

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;旁遮普语语音合成的“机械诵经”现象本质 当旁遮普语&#xff08;Gurmukhi script&#xff09;文本被输入主流TTS系统时&#xff0c;常出现一种高度重复、节奏僵硬、缺乏韵律起伏的输出效果——业内戏称…...