Swift使用Embassy库进行数据采集:热点新闻自动生成器
概述
爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的,例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序,该程序可以从新闻网站上采集热点信息,并生成一个简单的新闻摘要。
正文
Swift语言和Embassy库
Swift是一种现代的、高性能的、安全的、表达力强的编程语言,主要用于开发iOS、macOS、watchOS和tvOS等平台的应用。Swift也可以用于开发服务器端和命令行工具等应用。Swift支持多种编程范式,例如面向对象、函数式、协议导向等。Swift还提供了强大的错误处理机制,可以让开发者更容易地处理异常情况。
Embassy是一个基于Swift NIO的网络库,可以让开发者轻松地创建异步的网络应用。Embassy提供了一个事件循环,可以在单线程中处理多个网络请求和响应。Embassy还提供了一个HTTP客户端,可以发送HTTP请求并接收HTTP响应。Embassy还支持HTTPS、WebSocket、HTTP/2等协议。
爬虫程序的设计和实现
本文将使用Swift语言和Embassy库编写一个爬虫程序,该程序可以从新浪新闻网站上采集热点信息,并生成一个简单的新闻摘要。该程序的设计和实现如下:
- 首先,创建一个事件循环,用于处理网络请求和响应。
- 然后,创建一个HTTP客户端,用于发送HTTP请求并接收HTTP响应。
- 接着,使用爬虫代理,通过代理IP池用于随机选择代理IP地址,以避免被目标网站屏蔽。
- 然后,创建一个URL队列,用于存储待抓取的URL地址。
- 接着,创建一个解析器,用于解析HTML文档,并提取出新闻标题、链接、时间和内容等信息。
- 然后,创建一个生成器,用于根据新闻内容生成一个简单的新闻摘要。
- 最后,创建一个主函数,用于启动事件循环,并从URL队列中取出URL地址,发送HTTP请求,并处理HTTP响应。
以下是该程序的代码实现(加上中文注释):
// 导入Embassy库
import Embassy// 创建一个事件循环
let loop = try SelectorEventLoop(selector: try KqueueSelector())// 创建一个HTTP客户端
let httpClient = DefaultHTTPClient(eventLoop: loop)// 创建一个URL队列
let urlQueue = ["https://news.sina.com.cn/",// ...
]// 创建一个解析器
func parse(html: String) -> (title: String, link: String, time: String, content: String)? {// 使用正则表达式或其他方法解析HTML文档,并提取出新闻标题、链接、时间和内容等信息// 如果解析成功,返回一个元组;如果解析失败,返回nil// 这里只是一个示例,实际的解析方法可能需要更复杂的逻辑let pattern = "<h1><a href=\"(.*?)\".*?>(.*?)</a></h1>.*?<span class=\"time\">(.*?)</span>.*?<p class=\"content\">(.*?)</p>"let regex = try? NSRegularExpression(pattern: pattern, options: [])if let match = regex?.firstMatch(in: html, options: [], range: NSRange(location: 0, length: html.count)) {let link = (html as NSString).substring(with: match.range(at: 1))let title = (html as NSString).substring(with: match.range(at: 2))let time = (html as NSString).substring(with: match.range(at: 3))let content = (html as NSString).substring(with: match.range(at: 4))return (title, link, time, content)} else {return nil}
}// 创建一个生成器
func generate(content: String) -> String {// 使用自然语言处理或其他方法根据新闻内容生成一个简单的新闻摘要// 这里只是一个示例,实际的生成方法可能需要更复杂的逻辑// 这里使用了一个简单的规则:取出新闻内容中的前三句话作为新闻摘要let sentences = content.components(separatedBy: ".")if sentences.count >= 3 {return sentences[0...2].joined(separator: ".") + "."} else {return content}
}// 创建一个主函数
func main() {// 启动事件循环loop.runForever { error inprint(error)}// 从URL队列中取出URL地址for url in urlQueue {// 使用代理IP池(参考 亿牛云 爬虫代理的域名、端口、用户名、密码,需要到官网注册并免费获取)let proxy = "http://16YUN:16IP@www.16yun.cn:7102"// 发送HTTP请求,并处理HTTP响应httpClient.request(method: "GET",url: url,headers: ["User-Agent": "Mozilla/5.0"],proxyURLString: proxy,body: nil) { response, error inif let error = error {print(error)} else if let response = response {print("Status code:", response.statusCode)print("Headers:", response.headers)var data = Data()response.body.drain { chunk, error inif let chunk = chunk {data.append(chunk)} else if let error = error {print(error)} else {// 将数据转换为字符串if let html = String(data: data, encoding: .utf8) {// 调用解析器,解析HTML文档,并提取出新闻信息if let news = parse(html: html) {print("Title:", news.title)print("Link:", news.link)print("Time:", news.time)print("Content:", news.content)// 调用生成器,根据新闻内容生成一个简单的新闻摘要let summary = generate(content: news.content)print("Summary:", summary)} else {print("Failed to parse HTML")}} else {print("Failed to convert data to string")}}}} else {print("No response")}}}
}// 调用主函数
main()
结语
本文介绍了如何使用Swift语言和Embassy库编写一个简单的爬虫程序,该程序可以从新闻网站上采集热点信息,并生成一个简单的新闻摘要。本文还提供了该程序的代码实现,并加上了中文注释。如果你对爬虫技术感兴趣,可以继续深入学习和探索。
相关文章:

Swift使用Embassy库进行数据采集:热点新闻自动生成器
概述 爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的,例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序,该程序可以从新闻网站上采集热点信息,并生成一个简单…...

【AIGC核心技术剖析】改进视频修复的传播和变压器(动态滤除环境中的物体)
基于流的传播和时空变压器是视频修复(VI)中的两种主流机制。尽管这些组件有效,但它们仍然受到一些影响其性能的限制。以前基于传播的方法在图像域或特征域中单独执行。与学习隔离的全局图像传播可能会由于光流不准确而导致空间错位。此外&…...

Win系统VMware虚拟机安装配置(二)
系统的安装得分两个步骤,第一步得配置一台电脑,选配 cpu,内存,磁盘,网卡等硬 件。第二步才是安装系统。 一、配置电脑 1、 进入 VMware 双击 VMware 图标,看到如下界面。 2、 自定义新的虚拟机 3、…...
基于枚举实现的观察者模式
文章目录 前言一、观察者1.定义一个观察者接口2.察者接口具体实现类 二、主题1.定义一个主题接口2.主题接口具体实现类 三、枚举维护观察者1.定义枚举类维护观察者 四、观察者模式测试1.定义观察者模式测试接口2.观察者模式测试运行结果 前言 本文介绍使用枚举的方式实现的观察…...
基于神经网络的图像识别研究
基于神经网络的图像识别是计算机视觉领域的一个热门研究方向,尤其是深度学习技术的兴起。以下是一些与基于神经网络的图像识别相关的关键主题和研究方向: 1. 卷积神经网络(CNN): CNN是图像识别领域最重要的神经网络之…...

基于SSM的工资管理系统
基于SSM的工资管理系统 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 通知公告 考勤管理 工资管理 请假管理 摘要 基于SSM(Spring、S…...

微服务负载均衡实践
概述 本文介绍微服务的服务调用和负载均衡,使用spring cloud的loadbalancer及openfeign两种技术来实现。 本文的操作是在微服务的初步使用的基础上进行。 环境说明 jdk1.8 maven3.6.3 mysql8 spring cloud2021.0.8 spring boot2.7.12 idea2022 步骤 改造Eu…...
php定时任务
PHP实现执行定时任务的几种思路详解_php 精准定时任务_我是高手高手高高手的博客-CSDN博客 1.Linux服务器上使用CronTab定时执行php 我们先从相对比较复杂的服务器执行php谈起。服务器上安装了php,就可以执行php文件,无论是否安装了nginx或Apache这样的…...

2.2 如何使用FlinkSQL读取写入到文件系统(HDFS\Local\Hive)
目录 1、文件系统 SQL 连接器 2、如何指定文件系统类型 3、如何指定文件格式 4、读取文件系统 4.1 开启 目录监控 4.2 可用的 Metadata 5、写出文件系统 5.1 创建分区表 5.2 滚动策略、文件合并、分区提交 5.3 指定 Sink Parallelism 6、示例_通过FlinkSQL读取kafk…...
call函数和apply函数的区别
call和apply是 JavaScript 中的两个函数方法,用于调用函数并指定函数内部的this值以及传递参数。它们的主要区别在于参数的传递方式。 call方法:call方法允许你在调用函数时,显式地指定函数内部的this值和参数列表。它的语法为: …...
JavaCV踩坑之路1——Mac上安装OpenCV
Mac无法安装opencv 更新Homebrew: 打开终端并运行以下命令来更新Homebrew: brew update 移除Taps(仓库): 可能与homebrew-services仓库有关。你可以尝试将它移除: brew untap homebrew/services重新安装OpenCV: 在移除…...

es6(三)——常用es6(函数、数组、对象的扩展)
ES6的系列文章目录 第一章 Python 机器学习入门之pandas的使用 文章目录 ES6的系列文章目录0、数值的扩展一、函数的扩展1、函数的默认值2、函数的reset参数 二、数组的扩展1. 将对象转成数组的Array.from()2. 将对象转成数组的Array.from()3. 实例方法 find(),fin…...

API网关与社保模块
API网关与社保模块 理解zuul网关的作用完成zuul网关的搭建 实现社保模块的代码开发 zuul网关 在学习完前面的知识后,微服务架构已经初具雏形。但还有一些问题:不同的微服务一般会有不同的网 络地址,客户端在访问这些微服务时必须记住几十甚至…...
linux 安装 docker
linux 安装 docker docker及版本一键安装docker(本人使用的是手动安装)Docker手动安装 docker及版本 Docker从17.03版本之后分为CE(Community Edition: 社区版)和EE(Enterprise Edition: 企业版)。相对于社区版本,企业…...
整数转罗马数字
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 …...

利用爬虫采集音频信息完整代码示例
以下是一个使用WWW::RobotRules和duoip.cn/get_proxy的Perl下载器程序: #!/usr/bin/perluse strict; use warnings; use WWW::RobotRules; use LWP::UserAgent; use HTTP::Request; use HTTP::Response;# 创建一个UserAgent对象 my $ua LWP::UserAgent->new();#…...

WebSocket: 实时通信的新维度
介绍: 在现代Web应用程序中,实时通信对于提供即时更新和交互性至关重要。传统的HTTP协议虽然适合请求-响应模式,但对于需要频繁数据交换的场景并不理想。而WebSocket技术的出现填补了这个空白,为Web开发者们带来了一种高效、实时的…...

postgresql(openGauss)模糊匹配参数
被pg系这个show要求精准匹配参数恶心的不轻。 原理是用.psqlrc(openGauss用.gsqlrc)文件set一个select常量进去,需要用:调用这个常量。理论上也可以增强其他的各种功能。 我在openGauss做的一个例子 .gsqlrc(.psqlrc…...
jdk 加密 aes jar包解决
JDK1.8.0_151的无限制强度加密策略文件变动 JDK1.8.0_151无需去官网下载 local_policy.jar US_export_policy.jar这个jar包,只需要修改Java\jdk1.8.0_151\jre\lib\security这目录下的java.security文件配置即可。 随着越来越多的第三方工具只支持 JDK8,…...

C++ Primer 第十一章 关联容器 重点解读
1 map自定义排序 #include <map> #include <iostream> #include <functional> using namespace std; int main() {function<bool(pair<int, int>, pair<int, int>)> cmp [&](pair<int, int> p1, pair<int, int> p2) -&g…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...