Python项目实战——外汇牌价(附源码)

news2024/11/26 16:26:43

前言

1b83b1d3fff541e6844ba7bfc4b8f724.gif

几乎每个人都在使用银行卡,今天我们就来爬取某行外汇牌价,获取我们想要的数据。

环境使用

  • python 3.9
  • pycharm

模块使用

  • requests

模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

        parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

        os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

  • 失败一: pip 不是内部命令

                解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

                解决方法: 因为是网络链接超时, 需要切换镜像源

   

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:https://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:https://pypi.hustunique.com/
    山东理工大学:https://pypi.sdutlinux.org/
    豆瓣:https://pypi.douban.com/simple/
    例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名


失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

                解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

代码实现


首先,我们不管爬取什么网站,我们第一步就是要做的是,确认数据来源。知道我们要请求的网站是什么。就本文来说,我们确定请求的网站如下:

https://www.boc.cn/sourcedb/whpj/index.html

 我们想把['货币名称', '现汇买入价', '现钞买入价', '现汇卖出价', '现钞卖出价', '中行折算价', '发布日期', '发布时间']的数据获取下来,有的人说我复制粘贴,这岂不是太麻烦,既然学了python,为什么不用python获取呢。

接下来,我们开始分析数据,我们可以发现这是一个静态的网页。那么就更容易了,没有什么异步加载之类的。我们通过分析网页发现,我们可以使用xpath或者css定位数据。今天呢,主要用css的方法获取我们想要的数据。

240b455a5b0741e38e7845a6463b1bc1.png

首先,我们和爬其他网页一样,都是先发送请求,然后获取响应。本文也不例外。

res = requests.get(url, headers=headers)
    res.encoding = res.apparent_encoding
    # print(res.text)

    selector = parsel.Selector(res.text)

 我们会发现数据就在tr标签里面,接下来,我们的目标就是获取tr标签。

我们发现数据的标题和数据不在一个标签下,所以,我们先获取标题。代码如下:

titles = selector.css('div table tr th::text').getall()

dea8e87cb0df4a5497ff8df8325b9290.png

接下来,我们就可以获取我们的数据了,我们会发现,这是一个列表,所以我们要for循环遍历它。以获取货币名称为例,简单介绍一下,如何获取到我们想要的数据。

f749764297e443569fe03670a19db5f8.png

我们可以直观的看到,它在第一个,那么我们的代码如何实现呢。

theNameOfTheCurrency = info_list.css('td:nth-child(1)::text').get()

1af23f0b5f934aee9b792c33d2c75a41.png

 后面的代码就不解释,直接上代码。

        spotPrice = info_list.css('td:nth-child(2)::text').get()
        buyingRateForNotes = info_list.css('td:nth-child(3)::text').get()
        theSpotSellingRate = info_list.css('td:nth-child(4)::text').get()
        cashSellingRate = info_list.css('td:nth-child(5)::text').get()
        theBankOfChinaReducedPrice = info_list.css('td:nth-child(6)::text').get()
        theReleaseDate = info_list.css('td:nth-child(7)::text').get()
        releaseTime = info_list.css('td:nth-child(8)::text').get()

我们是要把这些数据保存到本地,也就是写入到csv。首先,就是写入到字典里面。

dit = {
            '货币名称': theNameOfTheCurrency,
            '现汇买入价': spotPrice,
            '现钞买入价': buyingRateForNotes,
            '现汇卖出价': theSpotSellingRate,
            '现钞卖出价': cashSellingRate,
            '中行折算价': theBankOfChinaReducedPrice,
            '发布日期': theReleaseDate,
            '发布时间': releaseTime,
        }

到这里,我们的代码就基本上结束了,我们想要的数据也就实现了,我们还差最后一步,代码如下:

csv_writer.writerow(dit)

效果展示

f191a1ab70b24137bac439955d8d84d0.png

我们可以看到,本地有一个csv文件,我们打开会惊奇的发现,我们居然得到了我们想要的数据。

cd98aba7d7fc454b9de7c77afd2d8809.png

喜欢的话,可以给我点个赞。

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

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

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

相关文章

5分钟搞懂 强缓存与协商缓存

Ⅰ、http缓存 HTTP 缓存策略 分为 > 「强制缓存」 和 「协商缓存」 为什么需要 HTTP 缓存 呢 ? 👇 直接使用缓存速度 >> 远比重新请求快 缓存对象有那些呢 ?👇 「图片」 「JS文件」 「CSS文件」 等等 文章目录Ⅰ、http缓存Ⅱ…

震惊!邻桌的程序猿做可视化报告竟然比我还快,带着好奇心我打开了他的电脑,发现惊天秘密,原因竟是...

其实,本文就是想分享一个做可视化的捷径! 制作可视化的方式有千千万。 Excel 控若能轻车熟路驾驭 VBA,能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选 手。 会编程的,Echarts 几十行代码,分分…

Flink反压如何排查

Flink反压利用了网络传输和动态限流。Flink的任务的组成由流和算子组成,那么流中的数据在算子之间转换的时候,会放入分布式的阻塞队列中。当消费者的阻塞队列满的时候,则会降低生产者的处理速度。 如上图所示,当Task C 的数据处…

nuxt 学习笔记

这里写目录标题路由跳转NuxtLinkquery参数params参数嵌套路由tab切换效果layouts 文件夹强制约定放置所有布局文件&#xff0c;并以插槽的形式作用在页面中1.在app.vue里面2.component 组件使用Vue < component :is"">Vuex生命周期数据请求useFetchuseAsyncDat…

鸿蒙设备学习|快速上手BearPi-HM Micro开发板

系列文章目录 第一章 鸿蒙设备学习|初识BearPi-HM Micro开发板 第二章 鸿蒙设备学习|快速上手BearPi-HM Micro开发板 文章目录系列文章目录前言一、环境要求1.硬件要求2.软件要求3.Linux构建工具要求4.Windows开发工具要求5.工具下载地址二、安装编译基础环境1.安装Linux编译环…

【速通版】吴恩达机器学习笔记Part1

准备速通一下吴恩达的机器学习 很快做个笔记5.2.3 监督学习 part 2_哔哩哔哩_bilibili 1.概述&#xff08;P1-P3) ML是AI的重要部分&#xff0c;AI的目标是AGI&#xff08;artificial general intelligence&#xff09;但是目前就。。。。 supervised learning&#xff1a;目…

如何开发L2毫秒接口?

L2毫秒接口普遍应用于大众的日常生活中&#xff0c;并且很多的企业通过api进行数据内容的调用&#xff0c;从而在技术上和成本上得到福利。 进行数据的整合与共享是L2毫秒接口的主要用途之一&#xff0c;所以开发L2毫秒接口就必须慎重&#xff0c;注意安全隐患&#xff0c;防止…

VHDL语言基础-组合逻辑电路-其它组合逻辑模块

目录 多路选择器&#xff1a; 逻辑功能&#xff1a; 常用的类型&#xff1a; 4选1多路选择器的实现&#xff1a; 求补器&#xff1a; 求补器的实现&#xff1a; 三态门&#xff1a; 三态门的应用实例&#xff1a; 三态门的实现&#xff1a; 缓冲器&#xff1a; 什么是…

Lesson 6.4 逻辑回归手动调参实验

文章目录一、数据准备与评估器构造1. 数据准备2. 构建机器学习流二、评估器训练与过拟合实验三、评估器的手动调参在补充了一系列关于正则化的基础理论以及 sklearn 中逻辑回归评估器的参数解释之后&#xff0c;接下来&#xff0c;我们尝试借助 sklearn 中的逻辑回归评估器&…

Ts笔记第一天

文章目录安装 ts运行环境 nodeTS类型数字 、字符串 和布尔类型字面量any 和unknown类型断言void和neverobjectArraytuple 元组enum 枚举安装 ts运行环境 node node-v看版本号 2. 安装ts -g全局安装 npm i -g typescript // 这里全局安装 -s安装无法使用tsc 创建一个01.ts文…

第五十章 动态规划——数位DP模型

第五十章 动态规划——数位DP模型一、什么是数位DP数位DP的识别数位DP的思路二、例题1、AcWing 1083. Windy数&#xff08;数位DP&#xff09;2、AcWing 1082. 数字游戏&#xff08;数位DP&#xff09;3、AcWing 1081. 度的数量&#xff08;数位DP&#xff09;一、什么是数位DP…

供应PEG试剂AC-PEG-COOH,Acrylate-PEG-Acid,丙烯酸酯-PEG-羧基

英文名称&#xff1a;AC-PEG-COOH&#xff0c;Acrylate-PEG-Acid 中文名称&#xff1a;丙烯酸酯-聚乙二醇-羧基 丙烯酸酯-PEG-COOH是一种含有丙烯酸酯和羧酸的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联剂。丙烯酸酯可与紫外光或自由基引发剂聚合。丙烯酸酯-PE…

从FPGA说起的深度学习(二)

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…

Leetcode.1797 设计一个验证系统

题目链接 Leetcode.1797 设计一个验证系统 Rating : 1534 题目描述 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime时刻之后 timeToLive秒过期。如果验证码被更新了&#xff0c;那么它会在 curr…

完成各种项目生态环评工作丨全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例

目录 专题一 生态环境影响评价框架及流程 专题二 基于遥感解译的土地利用现状图的编制 专题三 生物多样性测定及R语言分析 专题四 植被类型及植被覆盖度图的编制 专题五 生物量与净初级生产力测定&#xff1a;实测及模型 专题六 生态系统类型及服务价值评估 专题七 物种…

【漫漫转码路】Day 45 机器学习 day04

梯度下降 梯度下降法是常用于求解无约束情况下凸函数的极小值&#xff0c;是一种迭代类型的算法&#xff0c;因为凸函数只有一个极值点&#xff0c;故求解出来的极小值点就是函数的最小值点 公式 第一个θ&#xff0c;是更新之后的θ&#xff0c;第二个θ是更新之前的θ&…

数据挖掘,计算机网络、操作系统刷题笔记47

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记47 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

【LeetCode】1797. 设计一个验证系统

1797. 设计一个验证系统 题目描述 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之…

理解HDFS工作流程与机制,看这篇文章就够了

HDFS(The Hadoop Distributed File System) 是最初由Yahoo提出的分布式文件系统&#xff0c;它主要用来&#xff1a; 1&#xff09;存储大数据 2&#xff09;为应用提供大数据高速读取的能力 重点是掌握HDFS的文件读写流程&#xff0c;体会这种机制对整个分布式系统性能提升…

训练营day16

104.二叉树的最大深度 559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数104.二叉树的最大深度 力扣题目链接 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示…