一、写在前面

由于在平时的工作中,需要对某信托网的信托在售和资管在售数据进行统计分析,但是一条一条的输入,显然太过耗时耗力,于是萌生了写个爬虫的想法。

一门计算机语言,可以当做是在模仿人的目的或意图来进行一系列行为或动作,所以在写代码之前,首先要弄清楚你要干什么,如果是你,你每一步的动作是什么,然后将这一步步的动作通过代码传递给计算机,让计算机高效的帮你完成即可。

本文结合正则表达式和比较流行的beautifulsoup(bs4),对网页进行解析并提取数据,因此在正式进行之前,有必要简单介绍下正则表达式和bs4.

本人对于Python学习创建了一个小小的学习圈子,为各位提供了一个平台,大家一起来讨论学习Python。欢迎各位到来Python学习群:960410445一起讨论视频分享学习。Python是未来的发展方向,正在挑战我们的分析能力及对世界的认知方式,因此,我们与时俱进,迎接变化,并不断的成长,掌握Python核心技术,才是掌握真正的价值所在。

二、基础知识

1、正则表达式

具体的详细介绍可自行去网上补知识,这里只介绍一些规则和常用的用法。

2、bs4

同样,详细知识自行补,这里只介绍常用的用法:select结合选择器的用法。

主要有以下几种提取规则:

三、开始实战——爬取某信托网的信托在售数据

1、爬取前的准备工作——梳理好代码的逻辑

正如前面所说,写代码之前,首先要清楚你想要干什么,如果是你,你是什么样的动作来达到你的这个目的或意图。

第一,你的目的或意图是什么,对于本例而言,我需要获取任意某页至某页信托在售产品的下面数据:产品名称、发行机构、发行时间、最高收益、产品期限、投资行业、发行地、收益分配方式、发行规模、最低收益、最高收益和利率等级划分情况这12个数据。

第二,如果是人,需要哪些动作来达到这个目的。我们来看下网页。动作就清晰了:

输入网址/搜索关键字 > 进入网站 > 点击红色框框里的信托产品和在售 > 录入下面绿色框框里的相关信息 > 发现信息不全,再点击这个产品,在详情页(再下一张图)继续录入。

2、开始爬取

既然动作清晰了,那就可以让计算机来模拟人的这个动作进行爬取了。

然后就是写代码的逻辑了。我们用做数学题常用的倒推法来梳理这个过程。

要想获取数据 < 你得解析网页给你的响应 < 你得有个响应 < 你得发送请求 < 你得有个请求request < 你得有个url。

然后我们再正过来解题:获取url > 构建request > 发送请求 > 获取响应 > 解析响应 > 获取所需数据 > 保存数据。

所以按照这个步骤,我们可以先做出一个大框架,然后在框架的基础上补充血肉。大框架,就是定义个主函数。

值得注意的是,本例中,每个产品的信息获取,我们都有二次点击的动作,即第一页数据不全,我们再点击进入详情页进行剩余数据的获取,因此,本例是有两层的数据获取过程的。第一层使用正则表达式,第二层使用bs4。

① 定义主函数

如下是这个主函数,前面的写入相关数据你可以先不管,这都是在第一步的获取url时,后补过来的。

回到前面的目的:提取任意某页至任意某页的数据,所以写个循环是必须的,然后在循环下方,两层网页的数据获取框架就出来了。(由于第二层网页的url是根据第一层网页的某个数据拼接出来的,而第一层网页是一下子提取整个页面所有产品的信息,所以第二层网页的提取也设置了个循环,对第一层网页的所有产品,一个一个点进去进行提取)

② 获取url —— 第一层和第二层通用

由于我们需要访问两层的数据,所以希望定义一个函数,能对两层的URL都可以进行拼接。

如下图为第一层页面的内容和源码,由第二个红框中的内容(X-Requested-With:XMLHttpRequest),可知这是一个AJAX get请求,且携带者第三个红框中的数据,而第三个红框中的数据,又恰好是第一个红框中的url的一部分,即为:

http://www.某信托网.com/Action/ProductAJAX.ashx?加上第三个红框中的数据。

第三个框框中包括几个可变的数据:pageSize(表示一页显示多少产品);pageIndex(表示第几页);conditionStr(定义产品类型,1表示信托,2表示资管),其余的数据都是固定的(这其中有个_:1544925791285这种下划线带一串数字的东西,像是个随机数,去掉也没影响,我就给去掉了)。

下图为第二层页面的内容和源码,可见只是一个简单的get请求,且网址很简单,就是一个http://www.某信托网.com/Product/Detail.aspx?加上一个id,而这个id又来自哪里呢,答案就在第一层网页的响应数据中(见再下面一幅图的红色框)。

通过上面的分析,第一层网页的请求url由一个固定的部分加上一些数据,第二层网页的url依赖于第一层的数据,我们先在主函数中将url_1、url_2和一些可变的数据写入(见上面的主函数),然后定义一个函数用来拼接两层的url即可,因为第一层网页url的固定部分长度为47,第二层的为43,这里使用一个长度条件来判断是拼接第一层还是拼接第二层。

③ 构建request + 获取response一条龙 —— 第一层和第二层通用

获取url后,接下来就是构建request用来发送请求获取响应了,此处定义一个函数实现一条龙服务。

这里为了提防反爬,user_agent在多个里随机选,并使用了代理池(虽然不多),并且我电脑端也进行了局域网ip代理。

④ 解析第一层网页的内容

获取响应之后就是解析并提取数据了,第一层使用正则表达式的方法来进行。

获取的response如下如:

因此可写出如下正则,从左到右分配匹配出ID、产品名称、发行机构、发行时间、产品期限、投资行业、首页收益。

⑤ 解析第二层网页的内容并输出数据

第二层使用bs4中的select+选择器的方法来进行。除了第一层所提取的数据外,还需要发行地、收益分配方式、发行规模、最低收益、最高收益和利率等级分布情况。

网页如下,可见,我们所需要的信息隐藏在一个又一个tr标签里,而这个tr标签处于id=“procon1”下的一个table标签里(此处有个坑,就是从网页来看,table下还有个tbody标签,而实际得到的响应里并没有)。

由于我们不是所有的信息都要,所以我们可以一个一个的提取,最终输出个数据。代码如下(这中间用到了前面提到的选择器知识和一些字符串处理方法):

# 定义第4个函数parse_content_2,用来解析并匹配第二层网页内容,并输出数据,此处使用BeautifulSoup方法 defparse_content_2(response,content):

⑥ 保存数据到本地(以dataframe格式保存到本地CSV格式)

3、爬取结果

运行代码,这里以每页显示4个产品,爬取前3页的信托在售为例,运行结果如下:

然后打开存到本地的CSV文件如下:结果是美好的。

这种两层网页的数据抓取,可以用在非常非常非常多的地方呦。

转载于:https://juejin.im/post/5c2c5cd1e51d4541d80761e3

利用Python爬取金融市场数据相关推荐

  1. 利用python爬取股票交易数据

    利用python爬取股票交易数据 分析网站 找到返回的url url = https://xueqiu.com/service/v5/stock/screener/quote/list?page={p ...

  2. 如何利用python爬取网站数据

    Python是一种非常适合用于网络爬虫的编程语言,以下是Python爬取网站数据的步骤: 1. 确定目标网站和所需数据:首先要找到需要爬取数据的网站,确定你需要爬取的数据是哪一部分. 2. 发送请求: ...

  3. python能爬取网站后台数据_如何利用Python爬取网站数据?

    1.基本方法 其实用python爬取网页很简单,只有简单的几句话 这样就可以获得到页面的内容.接下来再用正则匹配去匹配所需要的内容就行了.但是,真正要做起来,就会有各种各样的细节问题. 2.登录 这是 ...

  4. 如何利用Python爬取网站数据?

    1.基本方法 其实用python爬取网页很简单,只有简单的几句话: 这样就可以获得到页面的内容.接下来再用正则匹配去匹配所需要的内容就行了.但是,真正要做起来,就会有各种各样的细节问题. 2.登录 这 ...

  5. 利用python爬取龙虎榜数据及后续分析

    ##之前已经有很多人写过相关内容,但我之前并未阅读过,这个爬虫也是按照自己的思路写的,可能比较丑陋,请见谅! 本人作为Python爬虫新手和股市韭菜,由于时间原因每晚没办法一个个翻龙虎榜数据,所以希望 ...

  6. bs4用法实例:用Python爬取金融市场数据

    1.获取标签soup.a 获取a标签(第一个) 2.获取属性soup.a.attrs 获取a标签下所有的属性和值,返回的是字典soup.a['name'] 获取a标签下的name属性 3.获取内容so ...

  7. python自动化爬取app_松勤软件自动化测试-如何利用Python爬取网站数据?

    这样就装载进一个cookie,用urlOpener去open登录以后就可以记住信息. 3.断线重连 如果只是做到上面的程度,不对open进行包装的话,只要网络状况有些起伏,就直接抛出异常,退出整个程序 ...

  8. python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?

    第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...

  9. python爬取股票信息_利用Python爬取网易上证所有股票数据(代码

    利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...

最新文章

  1. java反射的运用_java反射的使用
  2. 【分类器】- KNN
  3. c++双向列表释放_至为芯科技IP5356集成20W输出和双路TYPE-C快充输出,适用于充电宝/移动电源方案...
  4. linux切换默认编辑器
  5. VGG Loss的Pytorch实现
  6. bzoj 1015: [JSOI2008]星球大战starwar
  7. asp.net 2.0中页的生存周期(Lifecycle)和动态控件[转]
  8. 安卓手机上最好用的3个azw3阅读器
  9. 【WPF】命令 --《深入浅出WPF》
  10. 正弦信号与噪声信号仿真生成实测信号,自相关分析
  11. 74CMS模版注入漏洞复现
  12. 《关键对话》如何高效能沟通之何谓关键对话
  13. 程序员转行为什么这么难
  14. Cygwin环境使用第三方ARMGCC编译eCos系统
  15. mongodb 复制集部署(主从升级版)
  16. REID计算机网络,什么是行人重识别(ReID)?为什么要ReID?
  17. 谁再瞧不起搬砖的我。。
  18. 查看Linux服务器内存和cpu核数
  19. 【论文阅读】深度学习去雾1——论文精选
  20. Zynq入门——PS和PL接口技术详解

热门文章

  1. 自动驾驶汽车到底涉及了哪些技术?
  2. linux 进程 kswapd0 cpu占用过高
  3. java毕业设计“臻宝”书画竞拍系统(附源码、数据库)
  4. 机械臂雅可比矩阵的矢量积求法
  5. Socket网络程序设计(4) ———— 实现linux和windows的文件传输
  6. Java-day12(面向对象中2 Debug 调试 方法的重写 多态性)
  7. 建筑业营业税改征增值税调整的通知(一)〔2018〕392号
  8. c语言串口不能发送0d,串口调试 0D 0A 问题
  9. Sony A200小试~
  10. ccxt获取symbol为空