手把手教你入门Python爬虫

前言

  在上一篇文章中,我们讲解到了基础的计算机网络知识,并完成了“爬取豆瓣Top250电影信息”的项目。那么这一次,作者将带领大家完成“爬取中国银行外汇牌价”项目。

1. 观察网站,寻找规律

  我们首先登录中国银行外汇牌价网站: https://www.boc.cn/sourcedb/whpj/index.html


  可以看出,我们今天要爬取的网站,在页面设计上大体分为三大块:顶部的功能区、中部的外汇牌价数据和底部的描述信息。
  我们切换到第二页,网站显示出如下内容:


  通过对比这两页的内容(读者可自行翻阅后续页码),我们发现,该网站有关外汇牌价的页面,每一个页面都是按照固定的国家顺序、列属性顺序显示外汇牌价,页与页间的不同点是外汇牌价刷新的时间不同。
  因此,本项目设定任务目标为爬取中国银行外汇牌价网站的第一页所有外汇牌价信息。

2. 项目架构构思

  在各函数功能的设计上,我们依然借鉴手把手教你Python爬虫(一)中的设计思路。

# 加载包
import bs4      # 网页解析,获得数据
import re       # 正则表达式,进行文字匹配
import urllib.request,urllib.error    # 指定URL,获取网页数据
import xlwt     # 进行excel操作
from bs4 import BeautifulSoup         # 网页解析,获得数据
# 定义主函数
def main():
# 定义askURL(url)用于得到指定URL的html文件
def askURL(url):
# 定义getData()用于解析网页,获取数据
def getData():
# 定义saveData()用于保存数据
def saveData(currencydata,savepath):
# 定义程序执行入口
if __name__ == "__main__":

3. 程序编写

  • 编写(部分)主函数
def main():# 定义网址URLbaseurl = 'https://www.boc.cn/sourcedb/whpj/index.html'
  • 编写askURL(url)函数
def askURL(url):# 模拟浏览器头部信息head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}# 封装消息,发送请求request = urllib.request.Request(url, headers=head)html = ''try:# response变量用于接受返回html文件response = urllib.request.urlopen(request)html = response.read().decode('utf-8')except urllib.error.URLError as e:if hasattr(e, 'code'):print(e.code)if hasattr(e, 'reason'):print(e.reason)return html
  • 编写getData()函数
def getData(url):# 用于后续保存外汇牌价数据datalist = []# 保存获取到的网页源码html = askURL(url)# 解析爬取的网页soup = BeautifulSoup(html, 'html.parser')# 如果在此处执行print(soup)即打印查看经过BeautifulSoup()方法解析到的网页# 可以发现我们需要的外汇牌价信息,被许多无用超文本标记语言包裹# 可以发现,所需的外汇牌价信息都有一个特点,即被<tr>标签包裹# 因此决定筛选出所有<tr>标签,并将筛选出的结果保存到列表中item = soup.find_all('tr')  # 读者可以在此处执行print(item)查看item列表中具体有哪些内容# 发现item中,从第三个标签开始是货币内容# 决定编写循环,对item中的第3个至第30个对象进行遍历# 没遍历一个对象,就从中利用正则表达式提取出有用信息,存入datalist[]for i in range(2,29):    # 查找符合要求的字符串(td标签),形成列表data = []  # 保存一种货币的所有信息currentitem = item[i]  # 第i个tr标签currentitem = str(currentitem)  # 将标签及其内容转化为字符串格式,方便正则表达式比对# 正则表达式currencyRules在下文编写findcurrency = re.findall(currencyRules, currentitem)  # 正则表达式比对datalist.append(findcurrency)return datalist
  • 编写正则表达式,并定义为全局变量
currencyRules = re.compile(r'<td>(.*)</td>')

  以日元为例,经过BeautifulSoup()方法解析过后的源码为:

<tr><td>日元</td><td>6.564</td><td>6.36</td><td>6.6123</td><td>6.6225</td><td>6.6118</td><td class="pjrq">2020-08-03</td><td>19:06:34</td></tr>

  因此我们要做的,就是编写一个正则表达式,识别<tr> … </tr>标签(此时已经被str()方法转换为字符串)内的:以<td>开头,中间包含零个或多个任意字符,以</td>结尾的字符串。具体代码如上。
  注意,该正则表达式不能识别出:

<td class="pjrq">2020-08-03</td>

  鉴于本例只用于爬取一天的信息,故该信息可以省略。

  • 编写部分主函数(续)
def main():# 定义网址URLbaseurl = 'https://www.boc.cn/sourcedb/whpj/index.html'# 获取外汇牌价数据currencydata = getData(baseurl)
  • 编写保存数据saveData()函数
def saveData(currencydata,savepath):  # 参数为:待保存数据,保存路径# 创建一个excel文件book = xlwt.Workbook(encoding='utf-8',style_compression=0)# 创建一个sheet表sheet = book.add_sheet('中国银行外汇牌价', cell_overwrite_ok=True)# 定义一个元组,元素为列属性名称col = ('货币名称','现汇买入价','现钞买入价','现汇卖出价','现钞卖出价','中行折算价','发布时间')# 写入列名for i in range(0,7):sheet.write(0,i,col[i])# 写入数据for i in range(0,27):h = i +1print('正在写入第 %d 条' % h)data_1 = currencydata[i]for j in range(0,7):sheet.write(i + 1,j,data_1[j])book.save(savepath)
  • 编写完整主函数以及程序入口
def main():# 定义网址URLbaseurl = 'https://www.boc.cn/sourcedb/whpj/index.html'# 获取外汇牌价数据currencydata = getData(baseurl)savepath = '中国银行外汇牌价.xls'saveData(currencydata, savepath)  # 定义将数据保存到当前文件夹下if __name__ == "__main__":print('开始执行爬虫程序')main()print('爬取完毕')

4. 爬取结果


  到这里,即完成了对中国银行外汇牌价数据的爬取。

手把手教你入门Python爬虫(二)相关推荐

  1. python新手入门代码-新手必看:手把手教你入门 Python

    原标题:新手必看:手把手教你入门 Python 本文为 AI 研习社编译的技术博客,原标题 : Learning Python: From Zero to Hero 翻译 |永恒如新的日常校对 | 酱 ...

  2. 手把手教你利用 python 爬虫分析基金、股票

    手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...

  3. 最详细的爬虫实战 | 手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

  4. 硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

    文章目录 一.BeautifulSoup介绍 二.安装 三.bs4数据解析的原理 四.bs4 常用的方法和属性 1.BeautifulSoup构建 1.1 通过字符串构建 1.2 从文件加载 2.Be ...

  5. 手把手带你入门Python爬虫(二、爬虫预备知识)

    爬虫预备知识 一.计算机网络协议基础 二.Html.Css.Javascript Ajax 异步加载 GET请求 与 POST请求 3种content-type 三.爬虫基本方法 1. 采集方案分类 ...

  6. python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)

    大家好,我是J哥,专注原创,致力于用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.最近J哥做了个爬虫小项目,感觉还挺适合新手入门的,于是迫不及待想分享给大家. 什么是爬虫? ...

  7. 实战|手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

  8. 五一到底去哪玩?哪个景点人少又好玩?手把手教你玩Python爬虫

    "用实例和实力说话" 大家好,我是大鹏. 当客户想知道哪些景点人少又好玩,老板把这个任务交给你,作为业务人员,你选择用哪种方法解题? 以上两种工作方式都没错,但如果你是数据思维者, ...

  9. 爬虫实战|手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

最新文章

  1. UITableView 添加长按手势UILongPressGestureRecognizer
  2. 计算机组成原理 — FPGA 现场可编程门阵列
  3. linux c 字符串函数 replace indexOf substring 实现
  4. 【杂谈】我在有三AI从学生到老师
  5. 剑指offer 调整数组顺序使奇数位于偶数前面
  6. P1357 花园 (矩阵快速幂+ DP)
  7. Jwt Token 的刷新机制设计
  8. LeetCode 1248. 统计「优美子数组」(要复习)
  9. LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)
  10. 源码安装nginx以及平滑升级
  11. 1.9编程基础之顺序查找02:输出最高分数的学生姓名
  12. LayaAir 2.0 开发 2048 小游戏
  13. 什么是软件著作权,怎么申请软件著作权
  14. ik做尾巴摆动 maya_Maya表达式控制动力学动画之尾巴(图文)
  15. 对于IT这两个字眼,是不是只能由学习过IT的大学生才能做呢,就由我来为大家讲解一下IT的由来!
  16. 推荐一个app,收纳杭州最全登山地图!附亲测过的亲子徒步路线推荐
  17. 嵌入式Linux用java_嵌入式linux 开发步骤详细解析(Hello Embedded World)
  18. 在excel中如何筛选重复数据_高级筛选,让重复的数据记录无处可逃
  19. [BZOJ3837][Pa2013][随机][乱搞]Filary
  20. python中class什么意思_python-classmethod在此代码中做什么?

热门文章

  1. 11、在屏幕上显示文本
  2. 人人宝:解释了4种不同类型的人寿保险
  3. 敏捷开发是一个坑吗?
  4. 测评宝塔编译安装LNMP与LNMP一键安装包速度比较
  5. 封装微信微博QQ分享lib快速使用
  6. 西门子PLC之读与写
  7. 有刷电机行业调研报告 - 市场现状分析与发展前景预测
  8. linux新装mysql修改root密码_linuxmysql修改root密码
  9. Ab3d.PowerToys 9.5.x Crack
  10. 随便写一个测试的方式多开几个那地方那个地方你刚开始解放碑老规矩地方敌方刮大风