当前位置: 首页 > news >正文

Python爬虫:基础爬虫架构及爬取证券之星全站行情数据!

 

 爬虫成长之路(一)里我们介绍了如何爬取证券之星网站上所有A股数据,主要涉及网页获取和页面解析的知识。爬虫成长之路(二)里我们介绍了如何获取代理IP并验证,涉及了多线程编程和数据存储的知识。此次我们将在前两节的基础上,对证券之星全站的行情数据进行爬取。第一节的思路爬一个栏目的数据尚可,爬上百个栏目的数据工作量就有点大了。下面我们先介绍下基础的爬虫架构。

       本文主要包含爬虫框架六大基础模块,分别为爬虫调度器、URL下载器、URL管理器、HTML下载器、HTML解析器、数据存储器。功能分析如下

       爬虫调度器:主要负责统筹其他四个模块的工作。

       URL下载器:主要负责下载需要爬取数据的URL链接。

       URL管理器:负责管理URL链接,维护已经爬取的URL集合和未爬取的URL集合,提供获取新URL链接的接口。

       HTML下载器:用于从URL管理器中获取未爬取的URL链接并下载HRML网页。

       HTML解析器:用户从HTML下载器中获取已经下载的HTML网页,解析出有效数据交给数据存储器。

       数据存储器:用于将HTML解析器解析出来的数据通过文件或者数据库的形式储存起来。

       为了方便理解,以下是基础爬虫框架运行流程示意图

       

 

       此处介绍文件夹,下面,我们对这6大模块进行详细的介绍。

       一、URL下载器

       URL下载器包含两步,首先下载网站左侧导航栏的URL,然后通过导航栏的URL获取每个子栏目包含的链接列表。

       

       下面是获取左侧导航栏所有链接并生成导航文件的代码

 get_catalog

       下面是获取每个子栏目所有链接的代码

 get_urls

       二、URL管理器

       URL管理器主要包括两个变量,一个是已爬取的URL的 集合,另外一个是未爬取的URL的集合。采用Python中的set类型,主要是使用set的去重功能。

       URL管理器除了具有两个URL集合,还需要提供以下接口,用于配合其他模块使用,接口如下:

       判断是否有待取的URL,方法定义为has_new_url()。

       添加新的URL到未爬取集合中,方法定义为add_new_url(url),add_new_urls(urls)。

       获取一个未爬取的URL,方法定义为get_new_url()

       下面为URL管理器模块的代码

 UrlManager

       三、HTML下载器

       HTML下载器用来下载网页,这时候需要注意网页的编码,已保证下载的网页没有乱码。

       获取网页内容时可能会遇到IP被封的情况,所以我们得爬取一个代理IP池,供HTML下载器使用。

       下面是获取代理IP池的代码

 get_proxy_ip

       下面是HTML下载器模块的代码

 HtmlDownloader

       四、HTML解析器

       HTML解析器主要对HTML下载器下载的网页内容进行解析,提取想要的内容。

       本文用到的网页解析方法主要是正则表达式和BeautifulSoup,下面是HTML解析器的代码

 HtmlParser

       五、数据存储器

       数据存储器主要对解析器解析的数据进行存储,存储方式有很多种,本文选用MYSQL数据库进行存储。

       解析器把每一页的股票数据存为了一个数据框,然后通过数据库连接引擎,把数据框的数据直接存入数据库。

       以下是数据存储器的模块的代码

 DataOutput

       六、爬虫调度器

       爬虫调度器主要将上述几个模块组合起来,合理的分工,高效完成任务。

       爬虫调度器采用进程池的方式加快了程序执行的效率,下面是爬虫调度器模块的代码

 SpiderMan

       将上述每个模块的代码都新建一个py文件放在firstSpider文件夹下,并运行如下主程序即可获取证券之星全站的股票数据

 main

      麻雀虽小五脏俱全,以上是用简单的爬虫框架实现的一次全站内容爬取,在执行速度和程序伪装上还有很大提升空间,希望能够与大家一同交流成长。

Python学习路线汇总:Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

**学习资源已打包,需要的小伙伴可以戳这里:【学习资料】 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • spring管理bean源码解析
  • [GICv3] 3. 物理中断处理(Physical Interrupt Handling)
  • 【 香橙派 AIpro评测】烧系统到运行并使用Jupyter Lab 界面体验 AI 应用样例(新手福音)
  • Excel中用VBA实现Outlook发送当前工作簿
  • Qt项目:基于Qt实现的网络聊天室---TCP服务器和token验证
  • 从数据仓库到数据湖(上):数据湖导论
  • 如何通过文件分发系统,实现能源电力企业文件的安全分发流转?
  • 展开说说:Android之View基础知识解析
  • 【Qt 基础】绘图
  • 如何判断服务器是否被攻击
  • 微信小程序如何实现登陆和注册功能?
  • ShardingSphere-JDBC —— 整合 mybatis-plus,调用批量方法执行更新操作扫所有分表问题
  • 【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质
  • c++课后作业
  • Oracle左连接过滤条件注意事项
  • python3.6+scrapy+mysql 爬虫实战
  • cookie和session
  • Cumulo 的 ClojureScript 模块已经成型
  • Django 博客开发教程 16 - 统计文章阅读量
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • java8-模拟hadoop
  • Java到底能干嘛?
  • mysql常用命令汇总
  • Spring核心 Bean的高级装配
  • 阿里云Kubernetes容器服务上体验Knative
  • 创建一个Struts2项目maven 方式
  • 多线程事务回滚
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端面试之闭包
  • 手写双向链表LinkedList的几个常用功能
  • 问题之ssh中Host key verification failed的解决
  • 详解移动APP与web APP的区别
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 译米田引理
  • 2017年360最后一道编程题
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # Redis 入门到精通(七)-- redis 删除策略
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #Z2294. 打印树的直径
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (1)(1.13) SiK无线电高级配置(五)
  • (2015)JS ES6 必知的十个 特性
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Git) gitignore基础使用
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (补充)IDEA项目结构
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (力扣)1314.矩阵区域和
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (五)c52学习之旅-静态数码管
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)shell中括号的特殊用法 linux if多条件判断