使用Swift模拟用户登录当网获取数据并保存到MySQL中

news2024/11/19 16:45:24

DALL·E 2023-10-11 15.17.57 - 插图显示一个蓝色调的世界地图,上面有许多金色的连接线,代表HTTP代理的全球连通性。在地图的中心是一个巨大的“16YUN”Logo,周围有云朵和闪电符号,强调产品的速度和稳定性。.png

前言

当当网作为中国最大的综合性网上商城之一,通过爬取当当网数据,我们可以获取商品信息、用户评价、销售数据等宝贵的信息资源。这些数据可以帮助企业了解市场趋势、分析竞争对手、优化产品定价等,从而做出更明智的决策。

为什么使用Swift

使用Swift进行用户模拟登录和数据获取有以下几个优势:

  1. 强大的网络编程支持:Swift提供了丰富的网络编程库,使得模拟用户登录和数据获取变得简单而简单。
  2. 安全性和稳定性:Swift具有内存安全性和错误处理能力,可以帮助我们编写更安全、稳定的代码,减少潜在的漏洞和错误。
  3. 丰富的数据解析库:Swift拥有多种数据解析库,如SwiftyJSON、Codable等,可以轻松解析从当当网络获取的数据。
  4. 与MySQL数据库的无缝集成:Swift提供了多个MySQL客户端库,如MySQL Connector,使得与MySQL数据库的交互变得简单而便捷。

如何进行模拟登录

模拟登录用户当网获取数据的第一步。以下是使用Swift进行模拟登录的基本步骤:

  1. 构建登录请求:使用Swift的URLSession和URLRequest构建登录请求,并设置请求的URL、HTTP方法和参数等。
  2. 发送登录请求:使用URLSession的dataTask方法发送登录请求,并处理登录响应。
  3. 处理登录响应:检查登录响应的状态码和内容,判断登录是否成功。如果登录成功,获取并保存登录后的会话信息,以便后续的数据获取。
// 构建登录请求
guard let url = URL(string: "https://example.com/login") else {
    print("无效的URL")
    return
}

var request = URLRequest(url: url)
request.httpMethod = "POST"

// 设置请求参数
let parameters = ["username": "your_username", "password": "your_password"]
request.httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: [])

// 设置请求头
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// 发送登录请求
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
        print("登录请求失败:\(error.localizedDescription)")
        return
    }
    
    // 处理登录响应
    guard let httpResponse = response as? HTTPURLResponse else {
        print("无效的响应")
        return
    }
    
    if httpResponse.statusCode == 200 {
        // 登录成功,获取并保存登录后的会话信息
        if let cookies = HTTPCookieStorage.shared.cookies(for: url) {
            for cookie in cookies {
                // 保存会话信息,例如将cookie存储到UserDefaults中
                UserDefaults.standard.set(cookie.properties, forKey: "sessionCookie")
            }
        }
        
        print("登录成功")
    } else {
        // 登录失败
        print("登录失败:\(httpResponse.statusCode)")
    }
}

task.resume()

如何获取数据

登录成功后,我们可以使用Swift的网络编程库来获取当网的数据。以下是获取数据的基本步骤:

  1. 构建数据请求:使用Swift的URLSession和URLRequest构建数据请求,并设置请求的URL、HTTP方法和参数等。
  2. 发送数据请求:使用URLSession的dataTask方法发送数据请求,并处理数据响应。
  3. 解析数据响应:使用Swift的数据解析库,如SwiftyJSON,解析从当网络获取的数据,并提取所需的信息。
// 构建数据请求
guard let url = URL(string: "https://example.com/data") else {
    print("无效的URL")
    return
}

var request = URLRequest(url: url)
request.httpMethod = "GET"

// 设置代理信息
let proxyHost = "www.16yun.cn"
let proxyPort = "5445"
let proxyUser = "16QMSOML"
let proxyPass = "280651"

let proxyURL = URL(string: "http://\(proxyUser):\(proxyPass)@\(proxyHost):\(proxyPort)")
let configuration = URLSessionConfiguration.default
configuration.connectionProxyDictionary = [kCFNetworkProxiesHTTPProxy as AnyHashable: proxyURL]
let session = URLSession(configuration: configuration)

// 发送数据请求
let task = session.dataTask(with: request) { (data, response, error) in
    if let error = error {
        print("数据请求失败:\(error.localizedDescription)")
        return
    }
    
    // 解析数据响应
    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
            // 使用SwiftyJSON解析数据
            let swiftyJSON = JSON(json)
            
            // 提取所需的信息
            let title = swiftyJSON["title"].stringValue
            let author = swiftyJSON["author"].stringValue
            let content = swiftyJSON["content"].stringValue
            
            // 打印提取的信息
            print("标题:\(title)")
            print("作者:\(author)")
            print("内容:\(content)")
        } catch {
            print("数据解析失败:\(error.localizedDescription)")
        }
    }
}

task.resume()

如何保存到MySQL中

获取数据后,我们可以使用Swift的MySQL客户端将数据保存到MySQL数据库中。以下是保存数据到MySQL的基本步骤:

  1. 建立数据库连接:使用Swift的MySQL客户端库,如MySQL Connector,建立与MySQL数据库的连接。
  2. 构建插入语句:使用Swift的MySQL客户端库,构建插入语句,将获取的数据参数作为提交给插入语句。
  3. 执行插入操作:使用Swift的MySQL客户端库,执行插入操作,将数据保存到MySQL数据库中。
import MySQL

// 建立数据库连接
let connection = MySQL.Connection(host: "localhost", user: "username", password: "password", database: "database")
do {
    try connection.open()
    print("数据库连接成功")
} catch {
    print("数据库连接失败:\(error)")
}

// 构建插入语句
let title = "文章标题"
let author = "作者"
let content = "文章内容"

let query = "INSERT INTO articles (title, author, content) VALUES ('\(title)', '\(author)', '\(content)')"

// 执行插入操作
do {
    try connection.query(query)
    print("数据插入成功")
} catch {
    print("数据插入失败:\(error)")
}

// 关闭数据库连接
connection.close()
print("数据库连接已关闭")

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

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

相关文章

quartus+modesim仿真验证基本流程(使用自带仿真波形编辑器)

文章目录 环境搭建一、quartus设置二、quartus中新建工程三、仿真结果本文演示如何在quartus中启用modelsim进行功能仿真,同时重要一点是利用quartus中自带的仿真波形编辑工具,给输入信号通过图形界面生成想要的波形,之后调用modelsim进行仿真,将仿真结果直接显示在仿真波形…

synchronized总结:怎么保证可见性、有序性、原子性?

synchronized的原子性 synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块。 原子性:既然同一时间只有一个线程去运行里面的代码,那么这个操作就是不能被其它线程打断的,所以这里天然…

语音芯片怎么录音 以及如何选择合适的录音芯片

一、语音芯片如何录音 语音芯片怎么录音 以及如何选择合适的录音芯片 语音芯片,其中就有一个品类,称之为录音芯片 其实他们是合并在一个芯片里面的,也就是说,录音芯片肯定是又可以录又可以播 但是能播放的语音芯片&#xff0c…

OA——菜单里无法找到流程监控

在门户引擎里面做查看菜单的权限设置 编辑里面的可查看权限管理 把权限给到对应的人员或者部门就可以

恒驰服务 | 华为云数据使能专家服务offering之数仓建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中,存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题,通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容,支撑客户实现快速稳定上云,有效降低时间成本…

python的pytorch和torchvision利用wheel文件安装

python的pytorch和torchvision利用wheel文件安装 在做人工智能的时候,我们需要下载pytorch和torchvision,那么如何下载呢。利用wheel文件pip安装 下载 首先要看你的python版本,打开命令行,输入: python -V就可以看…

ip划分与私公网ip、ip的传递

报文问路:1、不知道跳转默认路由器,2、知道路径,向对应路径发出报文,3、路口路由器,下一步就是目标主机在哪。 想要通信必须同在一个局域网,其实将公网就可以看作一个大型的局域网。 在同一个局域网内发送…

制药、饮料等流程制造业主数据如何管?

业务背景——制造行业的数据转型过程中,主数据管理是成功的必要条件 MASTER DATA MANAGEMENT 流程制造是指被加工对像不间断地通过生产设备,通过一系列的加工装置使原材料进行化学或物理变化,最终得到产品。 由于流程制造中物料的变动性强&a…

C++ 写一个Data类的注意问题

Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数&#xff0c;定义我们给缺省参数&#xff0c;如下面两段代码&#xff1a; Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…

Python基础入门例程21-NP21 增加派对名单(二)(列表)

本专栏&#xff1a; Python365基础入门例程 作者&#xff1a;heda3 最近的博文&#xff1a; 1、Python基础入门例程19-NP19 列表的长度&#xff08;列表&#xff09;-CSDN博客 2、Python基础入门例程18-NP18 生成数字列表&#xff08;列表&#xff09;-CSDN博客 3、Pyth…

spring boot配置ssl(多cer格式)保姆级教程

1. 准备cer格式的证书&#xff1b; 2. 合并cer证书并转化成jks格式的证书 为啥有这一步&#xff0c;因为cer证书配置在spring boot项目中&#xff0c;项目启动不起来。如果有大佬想指导一下可以给我留言&#xff0c;在此先谢过大佬。 1&#xff09;先创建一个jks格式的证…

【教学类-19-04】202310《ABAB式-规律排序涂色-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 打印效果&#xff1a; 背景需求&#xff1a; 中班幼儿需要掌握ABAB规律排序&#xff0c;如下图所示&#xff0c;AB两个元素能外形不同、颜色不同。 2022年11月带领中3班&#xff08;现大3班&#xff09;幼…

maven子模块无法导入jar包问题

明明本地仓库有jar包 maven子模块无法导入jar包&#xff0c;然后放到父项目的pom.xml则可以导入 可以试试更新仓库后&#xff0c;引入成功

这款制作电子画册的网站,好用到爆

要是早点发现这款制作电子画册网站该多好啊&#xff01;由于缺乏相关知识和技能&#xff0c;一直没有找到合适的平台。直到最近&#xff0c;偶然发现了这个网站&#xff0c;才发现原来制作电子杂志如此简单 这个网站就是FLBOOK在线制作电子画册平台&#xff0c;它不仅提供了丰富…

PicoDiagnostics (NVH设备软件)-NVH软件计算原理探究

NVH 问题探讨 PicoDiagnostics (NVH设备软件)对于不同驱动方式的车辆、是否通过OBD口读取转速和速度&#xff0c;后轮差速传动比数值对其频率计算原理也是有影响的。究竟什么时候需要填后轮差速传动比呢&#xff1f;下面做一些探讨&#xff1a; 连接OBD诊断口计算速度&频率…

用思维导图成为职业规划达人

今天&#xff0c;我们来聊聊如何用思维导图来做职业规划&#xff1f;在外面进行职业规划的时候&#xff0c;常常包括以下几项自我认知以及定位、职位的要求以及自身与职位之间的匹配程度。 今天我们就用 在线制图工具ProcessOn&#xff0c;来制作这一份职业规划。 自我分析 …

国标发布|法大大参编《第三方电子合同服务平台信息安全技术要求》

2023年9月7日&#xff0c;国家市场监督管理总局联合国家标准化管理委员会&#xff0c;在全国标准信息公共服务平台发布了国家标准《第三方电子合同服务平台信息安全技术要求》&#xff0c;法大大作为主要起草单位、法大大联合创始人兼首席法务官梅臻担任主要起草人参与其中。 &…

基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能

#define uchar unsigned char//自定义无符号字符型为uchar #define uint unsigned int//自定义无符号整数型为uint #define NixieTubeSegmentCode P0//自定义数码管段码为单片机P0组引脚 #define NixieTubeBitCode P2//自定义数码管位码为单片机P2组引脚 sbit LED P1^0;//位定义…

云端服务器和本地服务器的区别

随着云计算技术的快速发展&#xff0c;云端服务器已经成为越来越多企业和个人的首选。相较于传统的本 地服务器&#xff0c;云端服务器有着许多不同之处。那么&#xff0c;它们之间到底有哪些区别呢? 1. 部署位置 本地服务器通常部署在用户所在的物理场所&#xff0c;例如公…

c语言基础:L1-063 吃鱼还是吃肉

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤&#xff1b;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重&#xff0c;给出补充营养的建议。 输入格式&#xff1a; 输入在第一行给出一个不超过 10 的正整数 N&am…