Professional Documents
Culture Documents
第9讲 金融数据的爬虫
第9讲 金融数据的爬虫
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
张欣然
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
中央财经大学金融学院
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
邮箱:zhangxinran@cufe.edu.cn
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
第九讲 金融数据的爬虫
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
本讲内容
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
二.网络爬虫之信息获取
三.网络爬虫之信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
四.网络爬虫在金融领域的应用
一.网络爬虫概述及其应用场景
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
2
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
及其应用场景
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
一、网络爬虫概述
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
频和视频等各种非结构化数据的形式广泛存在于网络上
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
一种按照一定的规则,自动抓取网络信息的程序或者脚本。
• 批量获取和解析上述非结构化数据常用方法是网络爬虫技术
C C C C
• 网络爬虫(web crawler,又称为网页蜘蛛,网络机器人),是
• 大数据时代下,与金融活动相关的数据以网页、文本、图片、音
中 中 中 中 中
4
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫的基本原理
中 中 中 中 中
器)对返回的响应进行解析和展示
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
批量化的方式从网页上获取需要的信息
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 网页响应的原理:客户端(浏览器)向服务器发起请求、服务器
接收到请求并进行解析、服务器返回对应的响应、客户端(浏览
• 网络爬虫的基本原理:在上述基础上模拟浏览器向服务器发起请
求,并获取相关的响应内容,可以理解为采用自动化、程序化和
中 中 中 中 中
5
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫的基本步骤
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 网络爬虫的基本步骤:信息获取和信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
多数时候信息解析的失败是由于网站反爬虫的存在导致信息获取困难
• 值得注意的是,在爬虫实战中,信息获取要比信息解析更为重要,大
中 中 中 中 中
6
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
• 网络爬虫分类:
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
网络爬虫的分类
国 国 国 国 国
• 静态网页爬虫:requests库
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 动态网页爬虫:requests库和selenium库
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
• 根据网页的编写方式分为:静态网页爬虫和动态网页爬虫
M M M M M
• 全网站爬虫:爬取工作量较大,往往采用scrapy爬虫框架来爬取
O O O O
O O O O
• 根据网络爬虫的规模大小分为:全网站爬虫和部分网站爬虫
C C C C
• 部分网站爬虫:可提炼网页变化规则,根据此规则构造网址进行爬虫
中 中 中 中 中
7
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 网络爬虫应用场景:
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫的应用场景
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
• 信息检索领域:搜索引擎的检索功能
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 金融领域:批量获取企业新闻、公司年报等,优化投融资决策
• 研究领域:从数据库中无法获取的大数据(上市公司舆情数据)
• 电商领域:获取店铺产品、比价和流量等,分析产品市场竞争力
中 中 中 中 中
8
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 网络爬虫的法律问题:
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
网络爬虫与反爬虫
O O O O
O O O O
C C C C
被抓取、哪些页面不可以被抓取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
• 大部分网络爬虫失败的原因都来自于网站本身的反爬虫设置
C C C C
• 常见的反爬虫机制:IP访问频率限制、登录限制、网页验证码等
中 中 中 中 中
• 检查在网站根目录下存在robots协议,其中标注了该网站的哪些页面可以
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
二、网络爬虫之信息获取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫之信息获取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
11
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
Curl方法
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
进行解析和存储
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
务器返回的信息,其中包含我们需要进行解析和提取的源代码
• Curl是用于在命令行或脚本中进行数据传输的工具,可以获取服
中 中 中 中 中
• 利用Curl命令可以完成网页的请求-响应过程,并且将返回的结果
12
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
Curl方法
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• Python代码演示
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
curl -h
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
curl www.baidu.com
#获取某网页内容:
curl -v www.baidu.com
#抓取网页并写入文件:
中 中 中 中 中
#有关curl命令的帮助文件
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
#打印请求和响应的相关信息:
O O O O
O O O O
C C C C
curl -o home.html http://www.sina.com.cn
中 中 中 中 中
国 国 国 国 国
#Curl命令的基础语法(命令行窗口运行)
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
curl -O http://www.mydomain.com/linux/index.html
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
13
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
Requests库
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 实际中使用的是Requests库中的.get()方法和.post()方法
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 在爬虫的信息获取阶段,Requests库是使用最广泛使用的库之一
中 中 中 中 中
14
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
print(type(r))
O O O O
C C C C
import requests
print(r.status_code)
中 中 中 中 中
#GET方法的基本用法
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
print(r.content.decode('utf-8'))
O O O O
O O O O
C C C C
• GET方法的基本用法
中 中 中 中 中
国 国 国 国 国
r = requests.get('https://www.baidu.com/')
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
Requests库-GET方法
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
并存储在r对象中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
解码,即可得到百度首页源代码
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
15
国 国 国 国 国
大 大 大 大 大
通过状态码r. status_code=200可知,返回结果为成功
学 学 学 学 学
首先通过.get()方法,我们获取了百度首页的源代码,
M M M M M
若要显示返回内容,则利用r.content.decode(‘utf-8’)进行
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
Requests库-GET方法
C
C
O
O
O
O
M
M
学
学
• GET方法的主要参数:params、headers、cookies等
大
大
国
国
中
中
#添加请求参数 #添加Headers信息
import requests import requests
C
C
O
O
O
O
data = { headers = {
M
M
学
学
'name':'germey', Mozilla/5.0 (Windows NT 10.0; Win64; x64)
大
大
国
国
'age':22 AppleWebKit/537.36 (KHTML, like Gecko)
中
中
} Chrome/79.0.3945.130 Safari/537.36
r = requests.get('http://httpbin.org/get', params=data) }
C
C
print(r.text) r= requests.get('https://www.zhihu.com/explore',headers=headers)
O
O
O
O
M
M
print(r.text)
学
学
大
大
在实际中,通常通过设置上述三者的信息来获取 #添加Cookies信息
国
国
中
中
网站数据,可简单理解为对上述参数的设置就是 headers = {
为了给我们的爬虫程序穿上一层“伪装”,让网站 'Cookie':'Cookie信息',
认为是正常的用户访问,从而绕过网站的反爬虫 }
C
C
O
O
r = requests.get('https://www.zhihu.com',headers=headers)
O
O
机制,获取到网页的源代码。
M
M
学
学
print(r.text)
大
大
16
国
国
中
中
M
M
学
学
大
大
国
国
中
中
Requests库-POST方法
C
C
O
O
O
O
M
M
学
学
大
大
国
国
#POST方法的基本用法 在进行请求时,某些网站往往需要提交一些
中
中
import requests 数据(例如用户名,密码)或其他信息(上
data = {'name':'germey','age':'22'} 传文件)后网站才能返回数据,此时我们便
C
C
r = requests.post('http://httpbin.org/post',data=data) 利用POST方法来进行数据的获取,其余步骤
O
O
O
O
M
M
与GET方法比较类似。
学
学
大
大
files = {'file':open('favicon.ico','rb')}
国
国
中
中
r = requests.post('http://httpbin.org/post',files=files)
print(r.text)
C
C
O
O
O
O
M
M
学
学
大
大
国
国
中
中
C
C
O
O
O
O
M
M
学
学
大
大
17
国
国
中
中
M
M
学
学
大
大
国
国
中
中
Selenium库
C
C
O
O
O
O
M
M
学
学
• Selenium可驱动浏览器自动执行自定义好的逻辑代码,即可以通过代
大
大
国
国
中
中
码完全模拟为人类使用浏览器自动访问目标站点并操作
• 本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、
C
C
O
O
下拉等... ,可支持多种浏览器
O
O
M
M
学
学
• 优点:避开一系列复杂的通信流程,假如目标站点有一系列复杂的通信流程,
大
大
国
国
例如登录时滑动验证等... 使用Requests模块的时候就会特别麻烦,可以使用
中
中
Selenium
• 缺点:Selenium本质上是驱动浏览器对目标站点发送请求,那浏览器在访问目
C
C
O
O
O
O
标站点的时候,都需要把静态资源都加载完毕,速度特别慢,效率低,一般用
M
M
学
学
它来做登录验证
大
大
国
国
中
中
• 实际应用中,Selenium库常被用作登录验证等操作,是在利用Requests
库无法获取数据的情况下的替代选择,适用于反爬虫机制较强的网站
C
C
O
O
O
O
M
M
学
学
大
大
18
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
Selenium库工作原理
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
浏览器,这样就实现了使用Python间接的操控浏览器
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 通过Python来控制Selenium,然后让Selenium 控制浏览器,操纵
中 中 中 中 中
19
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 具体步骤:
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 3.编写相关代码
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
Selenium案例
• 1. 理清手工操作的步骤
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
使用手工操作时的步骤转化为程序代码即可。
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 2.在页面中找出手工操作时点击、搜索等部分对应的XPath路径
加简单“所见即所得”。我们需要爬取某个数据,只需要将自己
中 中 中 中 中
• 爬虫思路:与Requests库不同,使用Selenium进行爬虫时的思路更
20
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 1. 理清手工操作步骤:
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
• 先点击搜索框,然后把北京删掉,替换成武汉市
O O O O
O O O O
C C C C
Selenium案例(Python界面展示)
• 打开网页:直接点击这里进入:https://www.elong.com/
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
• 目标:在艺龙旅行网站找出武汉市内的酒店信息并进行存储
C C C C
中 中 中 中 中
21
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 第五步,获取详情页的源代码
• 第二步,清除搜索框中的内容
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
• 第四步,进行点击操作,进入详情页
M M M M M
O O O O
O O O O
• 第三步,搜索框输入中我们需要的内容
C C C C
• 使用XPath来进行搜寻工作,具体步骤是:
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
• 第一步,右键检查,找出并复制对应元素的XPath
C C C C
Selenium案例(Python界面展示)
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 2. 在页面中找出手工操作时点击、搜索等部分对应的XPath路径
中 中 中 中 中
22
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 3.编写相关代码
O O O O
C C C C
from selenium import webdriver
driver.get("http://www.elong.com/")
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
driver.maximize_window() # 将浏览器最大化
C C C C
中 中 中 中 中
国 国 国 国 国
driver = webdriver.Chrome() # 创建一个Selenium的对象
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
time.sleep(1) # 打开网站,并加载1s,避免渲染未完成就进行下一步操作
M M M M M
O O O O
O O O O
C C C C
Selenium案例(Python界面展示)
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
23
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
Selenium案例(Python界面展示)
C
C
O
O
O
O
M
M
学
学
• 3.编写相关代码
大
大
国
国
中
中
• Selenium代替人工进行上述清除、输入和点击操作,具体的代码
如下:
C
C
O
O
O
O
M
M
学
学
大
大
#将搜索框中的内容清理
国
国
中
中
driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').clear()
#输入新的搜索内容
driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').send_keys('武汉市')
C
C
O
O
#点击搜索,获取源代码
O
O
M
M
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()
学
学
大
大
driver.page_source
国
国
中
中
C
C
O
O
O
O
M
M
学
学
大
大
24
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
API获取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
程序向接口发出请求,可以返回响应的数据
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
据,因此获取信息后的信息解析难度将会大大降低
• 步骤:明确需求→查看API文档→信息获取→信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• API是数据供应者主动为数据获取者提供的一个接口,通过利用
• 由于是网站主动提供的数据接口,通常是以规范化的格式返回数
中 中 中 中 中
25
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
三、网络爬虫之信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
网络爬虫之信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
27
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• HTML文档
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
HTML基础知识
中 中 中 中 中
国 国 国 国 国
的扩展名为*.htm或*.html
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
而是一种用于描述网页的标记语言
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
添加属性,从而展示成为我们所看到的网页效果
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 在上一节中利用requests等方法获取的网页信息,其本质就是
HTML文档。对其进行解析必须要先了解HTML文档的相关知识
• HTML是(HyperText Markup Language)超文本标识语言,网页
• HTML运行在浏览器上,由浏览器来解析,不是一种编程语言,
• HTML语言相当于将一段文字前后用节点包裹起来,并在节点中
中 中 中 中 中
28
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• HTML节点
中 中 中 中 中
id
国 国 国 国 国
src
<a>
<p>
href
大 大 大 大 大
class
学 学 学 学 学
<div>
<img>
M M M M M
节点名
<head>
属性名
O O O O
O O O O
C <h1>~<h6>C C C
HTML基础知识
中 中 中 中 中
描述
国 国 国 国 国
描述
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
用于定义段落
规定元素的类名
指定连接的地址
中 规定元素的唯一id 中 中 中 中
国 国 国 国 国
大 大 大 大 大
向网页中嵌入一副图像
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
可以把文档分割为独立的、不同的部分
学 学 学 学 学
M M M M M
引用该图像文件的绝对路径或者相对路径
O O O O
O O O O
C C C C
定义超链接,用于从一个页面链接到另一个页面
用于定义文档的头部,它是所有头部元素的容器
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
可定义标题,<h1>定义最大的标题,<h6>定义最小的标题
O O O O
O O O O
C C C C
获取信息所处的位置,方便在获取信息后对信息进行解析和提取
• 了解HTML节点以及其属性有利于掌握网页的整体结构以及需要
中 中 中 中 中
29
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
<html>
<head>
O O O O
<body>
</html>
</head>
</body>
O O O O
C C C C
• HTML示例
中 中 中 中 中
#HTML代码示例
国 国 国 国 国
<!DOCTYPE html>
大 大 大 大 大
学 学 学 学 学
M M M M M
<meta charset="utf-8">
<title>爬虫教程</title>
O O O O
O O O O
C C C C
<p>我的第一个段落。</p>
<h1>我的第一个标题</h1>
HTML基础知识
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
30
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
有些浏览器会设置GBK为默认编码,则需要设为 <meta charset="gbk“>
O O O O
对于中文网页需使用 <meta charset=“utf-8”> 声明编码,否则会乱码。
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 利用网页检查调用源代码
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
开发者工具基础知识
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
• 谷歌Chrome浏览器被广泛运用于爬虫和网站开发
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• Chrome浏览器查看网页HTML源码:F12调出,或右键检查调出
中 中 中 中 中
31
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
码、网络四个模块
C C C C
• 开发者工具初步介绍
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
开发者工具基础知识
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 其中,在爬虫时最常用的两个模块分别是元素和网络
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
• Chrome开发者工具最常用的四个功能模块:元素、控制台、源代
32
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 开发者工具初步介绍
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 元素窗口有两个主要的功能:
开发者工具基础知识
中 中 中 中 中
方便找出需要获取信息的定位条件
国 国 国 国 国
大 大 大 大 大
• 1.元素(Elements)主题内容介绍
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
在开发者工具元素一栏中定位到该元素源代码的具体位置
M M M M M
O O O O
O O O O
C C C C
代码(Sources)模块中未出现的内容可以在元素窗口中查看到
• 第一,包含整个页面的源代码,特别是对于动态网页,某些在源
• 第二,元素窗口会随着鼠标的移动而展示出对应的节点和内容,
• 元素中可以查看页面的源代码:从页面中选择需要查看的元素,
中 中 中 中 中
33
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
容即可
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 开发者工具初步介绍
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
开发者工具基础知识
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 1.元素(Elements)主题内容介绍
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
面的所有源代码后,从<body>节点中取出第一个<a>节点中的内
• 如下图所示,若我们需要提取百度搜索框中的文字,则在获取页
中 中 中 中 中
34
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 开发者工具初步介绍
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
应可以帮助我们获取相关信息
开发者工具基础知识
中 中 中 中 中
• 2. 网络(Network)主题内容介绍
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 下面以百度搜索的页面对网络模块进行介绍。
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
• 网络模块准确地记录了浏览器和服务器的请求-响应过程
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
信息以各种不同类型的文件传输回客户端,并在浏览器中显示
• 网络模块的内容对于爬虫非常重要,通过寻找目标内容所在的响
• 例如,在百度搜索中向浏览器提交搜索请求,服务器会将网站的
中 中 中 中 中
35
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
开发者工具基础知识
C
C
O
O
O
O
M
M
学
学
• 开发者工具初步介绍
大
大
国
国
中
中
• 2. 网络(Network)主题内容介绍
C
C
• 点击某个具体请求后的界面,如下图所示:
O
O
O
O
M
M
学
学
大
大
• 网络模块的信息主要分为六部分:
国
国
中
中
头部信息(Headers)、预览(Preview)、响应(Response)、
启动器(Initiator)、计时器(Timing)和储存在用户本地终端
上的数据(Cookies)
C
C
O
O
• 爬虫中最常用的是前三个:
O
O
M
M
学
学
(1) Headers:资源的请求URL、HTTP方法、响应状态码、请求头
大
大
国
国
和响应头及它们各自的值、请求参数等
中
中
(2) Preview:预览面板,用于响应资源的预览
(3) Response:响应信息面板包含资源还未进行格式处理的内容
C
C
• 根据上述三部分的内容,既可以构建请求头实现信息获取,也
O
O
O
O
可以查看响应的内容以进行下面的网页解析
M
M
学
学
大
大
36
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
择和信息提取两步)
• Beautiful Soup库最常用
HTML网页解析
中 中 中 中 中
• XPath的使用可作为参考
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
• 在查看源代码后,下一步便是进行源代码的解析
O O O O
O O O O
C C C C
• 正则表达式匹配最直接和最快捷,但编写起来较为复杂
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 爬虫常用的解析方式主要有正则表达式、Beautiful Soup、XPath
节点之间的从属关系,将信息从节点中提取出来(即分为节点选
• 解析网页的核心是要找到需要获取的内容所存放的节点以及不同
中 中 中 中 中
37
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
Beautiful Soup库
C
C
O
O
O
O
M
M
学
学
• Beautiful Soup提供以下四种解析器
大
大
国
国
中
中
• 标准库,soup = BeautifulSoup(content, "html.parser")
• lxml解析器,soup = BeautifulSoup(content, "lxml") # lxml解析速度快兼容错能力强
C
C
O
O
• xml解析器,soup = BeautifulSoup(content, "xml")
O
O
M
M
• html5lib解析器,soup = BeautifulSoup(content, "html5lib")
学
学
大
大
国
国
中
中
• 采用百度首页来讲解BeautifulSoup的使用
C
C
#调用bs4模块中的BeautifulSoup模块
O
O
O
O
M
M
from bs4 import BeautifulSoup
学
学
大
大
import requests
国
国
中
中
response = requests.get("https://www.baidu.com")
#获取页面编码格式并修改请求编码为页面对应的编码格式
encoding = response.apparent_encoding
C
C
O
O
response.encoding = encoding
O
O
M
M
学
学
#使用lxml解析器来对百度首页HTML进行解析并打印结果
大
大
38
国
国
soup = BeautifulSoup(response.text, "lxml")
中
中
M
M
学
学
大
大
国
国
中
中
Beautiful Soup库
C
C
O
O
O
O
M
M
学
学
• 信息的解析分为两步:节点选择和数据提取
大
大
国
国
中
中
• 节点选择
C
C
O
O
O
O
第一种方式是直接利用节点的名称选取节点内容
M
M
#获取HTML中不同节点的内容
学
学
左图中只选取了标题title节点中的所有内容
大
大
#直接选取节点
国
国
优点:只要知道节点的名称便可以直接选取
中
中
soup.title
缺点:一次只能选择一个节点,遇到节点名称相同属性不同的情况无法区分
C
C
O
O
#find方法选取节点 第二种方式是利用find方法选取节点
O
O
M
M
soup.find("div", id="lg") 左图中选取节点名为div,同时其属性id为lg的节点中的所有内容
学
学
大
大
优点:可以直接选取想要的节点,同时还可以指定节点的属性
国
国
中
中
缺点:每次只能选取一个节点
#find_all方法选取节点
第三种方式是利用find_all方法选取节点
C
C
soup.find_all("img")
O
O
O
O
左图中选取了所有名称为img的节点,其返回的结果是一个列表
M
M
学
学
列表中的每一个元素包含一个img节点中的内容
大
大
39
国
国
中
中
M
M
学
学
大
大
国
国
中
中
Beautiful Soup库
C
C
O
O
O
O
M
M
学
学
• 信息的解析分为两步:节点选择和数据提取
大
大
国
国
中
中
• 两种数据提取方式:提取文本内容和提取属性
C
C
O
O
#提取节点内的数据
O
O
M
M
学
学
a = soup.find('a', {'class' : 'mnav'})
大
大
国
国
print(a)
中
中
#返回内容
C
C
<a class="mnav" href="http://news.baidu.com"
O
O
O
O
M
M
name="tj_trnews">新闻</a> 第一种是节点中的文本内容,利用get_text()方法来获取。
学
学
大
大
国
国
中
中
#提取文本内容 另一种是节点中的属性内容,提取出节点中的超链接内容
a.get_text()
实践中,大多数数据提取内容都是获取节点中的文本信息和属性信息
C
C
O
O
#提取属性
O
O
M
M
a['href']
学
学
大
大
40
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
.
/
..
//
M M M M M
@
O O O O
O O O O
C C C C
表达式
中 中 中 中 中
国 国 国 国 国
XPath方法
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
选取当前节点
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C 选取当前节点的父节点 C C C
• XPath全称是XML Path Language
指定属性(id、class……)
中 中 中 中 中
在当前节点中选取子孙节点
国 国 国 国 国
在当前节点中选取直接子节点
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
解释说明
XPath中则主要通过“//”的方式来选择节点
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
• 它既可以用来解析XML,也可以用来解析HTML
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• BeautifulSoup主要是通过“.”的方式来进行节点或者的选择,而
中 中 中 中 中
41
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
XPath方法
C
C
O
O
O
O
M
M
学
学
• 与BeautifulSoup类似,先获取百度首页的源代码,通过etree模块
大
大
国
国
中
中
构造对象,将上述的对象转化为字符串类型且编码为utf-8方便接
下来的解析: #导入相关的模块
C
C
O
O
O
O
from lxml import etree
M
M
学
学
import requests
大
大
国
国
import html
中
中
#请求网页并返回结果
response = requests.get("https://www.baidu.com")
C
C
O
O
encoding = response.apparent_encoding
O
O
M
M
response.encoding = encoding
学
学
大
大
国
国
中
中
#行初始化构造解析对象
soup = etree.HTML(response.text)
C
C
#打印结果
O
O
O
O
soup_html = etree.tostring(soup).decode("utf-8")
M
M
学
学
print(html.unescape(soup_html))
大
大
42
国
国
中
中
M
M
学
学
大
大
国
国
中
中
XPath方法
C
C
O
O
O
O
M
M
学
学
• 信息的解析分为两步:节点选择和数据提取
大
大
国
国
中
中
• 节点选择
C
C
O
O
O
O
#利用XPath获取HTML中的节点内容 BeautifulSoup直接选择节点名称,XPath有“当前节点”
M
M
学
学
“当前节点”为目前所在的节点
大
大
国
国
#选择当前节点下的所有img节点
中
中
soup.xpath("//img") 第一种,直接选择当前节点下的我们需要的节点
利用//加上节点名即可,此时当前节点变为所有的img节点
C
C
O
O
#选择当前节点下的所有p节点下的直接a节点
O
O
M
M
soup.xpath("//p/a") 第二种,选择当前节点下的所有p节点
学
学
大
大
然后选择p节点的直接a节点
国
国
中
中
#选择当前节点下的所有p节点下的拥有特定属性
的直接a节点 第三种,选择符合第二种情况下的
soup.xpath("//p/a[@class='cp-feedback']") 属性class为cp-feedback的直接a节点
C
C
O
O
O
O
M
M
学
学
大
大
43
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 数据提取
#提取链接信息
#提取文本信息
中 中 中 中 中
soup.xpath("//a/text()")
国 国 国 国 国
XPath方法
大 大 大 大 大
soup.xpath("//img/@src")
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
#利用XPath提取节点中的信息
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 信息的解析分为两步:节点选择和数据提取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
第二种是节点中的属性内容,利用/@src得到链接
大 大 大 大 大
第一种是节点中的文本内容,利用/text()方法来获取
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
44
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
四、网络爬虫
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
在金融领域的应用
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
• 第二步:点击进入报告页面(筛选公告)
O O O O
国证监会指定的上市公司信息披露网站
C C C C
中 中 中 中 中
• 第三步:逐一点击下载每一篇报告(下载文件)
国 国 国 国 国
大 大 大 大 大
• 第一步:搜索关键词,选择上市公司(搜索股票)
学 学 学 学 学
M M M M M
络投票等内容功能,一站式服务资本市场投资者
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
信息的操作过程大同小异,重复性很高,主要分为以下三步:
• 巨潮资讯网(首页链接http://www.cninfo.com.cn/new/index)是中
• 不同投资者每次关注的股票(公司)不一样,但是在巨潮网搜索
• 该平台提供了上市公司公告、公司资讯、公司互动、股东大会网
中 中 中 中 中
46
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
47
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 1. 搜索股票
大
大
国
国
中
中
• 目标:获得在搜索窗口输入关键词时所出现的网址,可利用其返回值
构建关键词搜索的返回列表
C
C
O
O
O
O
• 巨潮网的主页搜索框,右键打开“检查”按钮并切换到网络(Network)
M
M
学
学
模块,然后在搜索框中输入“建设”两个字,可以看到网络模块返回
大
大
国
国
了一个http://www.cninfo.com.cn/new/information/topSearch/detailOfQuer
中
中
y的网址,点击其中的响应(Response)模块,查看其中的内容可以发
现所有的相关搜索结果均在其源代码中。
C
C
O
O
O
O
M
M
• 通过观察可以发现,请求数据时采用的是POST命令。载荷中的参数,
学
学
大
大
国
国
提交的共有keyWord,maxSecNum以及maxListNum,其中改变的参数
中
中
主要是keyWord,即我们在搜索时所输入的关键词
C
C
O
O
O
O
M
M
学
学
大
大
48
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
49
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 1. 搜索股票
大
大
国
国
中
中
#输入关键词时所返回的网址
url = "http://www.cninfo.com.cn/new/information/topSearch/detailOfQuery"
C
C
O
O
O
O
requestbody = {
M
M
学
学
'keyWord': keyWord,
大
大
国
国
'maxSecNum': 10,
中
中
'maxListNum': 5}
C
C
#根据构造的请求获取相应数据
O
O
O
O
M
M
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
学
学
Chrome/96.0.4664.45 Safari/537.36'} # 加请求头
大
大
国
国
中
中
data = json.loads(res.post(url, data=requestbody, headers=headers).content)
index = 0 # 初始值
data = [i for i in data['keyBoardList'] if i['category'] == 'A股'] # 剔除A股外的股票
C
C
O
O
O
O
M
M
学
学
大
大
50
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 1. 搜索股票
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M print('股票基本信息如下:')M M M
O O O O
O O O O
C C C C
#将返回的信息存储并进行展示
name = data[index]['zwjc'] # 股票名
orgId = data[index]['orgId'] # 股票ID
code = data[index]['code'] # 股票代码
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
print('股票名字:', name, '\n股票代码:', code)
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
51
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 2. 筛选公告
大
大
国
国
中
中
• 和上一步的思路类似,我们需要首先通过浏览器操作一遍,然后通过
网络(Network)模块的内容判断操作所请求的信息所在的网址是哪一
个,然后观察其网址结构,构造相应的参数请求数据,最后输出我们
C
C
O
O
O
O
需要的信息
M
M
学
学
大
大
• 巨潮网主页打开“检查”按钮并切换到网络(Network)模块,通过搜
国
国
中
中
索股票操作并点击搜索后,在新打开的Network窗口可发现,公告信息
由网址http://www.cninfo.com.cn/new/hisAnnouncement/query响应返回
C
C
• 分类保存在参数category中,通过勾选全部分类,可以获取所有分类对
O
O
O
O
M
M
应的请求参数名,并且将其保存到字典category_dict中
学
学
大
大
国
国
• 日期则是保存到seDate中,其格式为2019-01-01~2022-01-01,故我们将
中
中
其设置为变量,待用户手动输入
• 构造好URL和requestbody,然后发送POST请求
C
C
O
O
O
O
M
M
学
学
大
大
52
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
53
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 2. 筛选公告
大
大
国
国
中
中
• 各类不同类型报告所对应的参数如下:
C
C
O
O
O
O
#不同类型年报的参数
M
M
学
学
category_dict = {
大
大
国
国
'年报': 'category_ndbg_szsh;', '半年报': 'category_bndbg_szsh;', '一季度报': 'category_yjdbg_szsh;', '三
中
中
季度报': 'category_sjdbg_szsh;', '业绩报告': 'category_yjygjxz_szsh;', '权益分派':
'category_qyfpxzcs_szsh;‘,'董事会': 'category_dshgg_szsh;', '监事会': 'category_jshgg_szsh;', '股东大
C
C
会': 'category_gddh_szsh;','日常经营': 'category_rcjy_szsh;', '公司治理': 'category_gszl_szsh;', '中介报
O
O
O
O
M
M
告': 'category_zj_szsh;','首发': 'category_sf_szsh;', '增发': 'category_zf_szsh;', '股权激励':
学
学
大
大
'category_gqjl_szsh;‘,'配股': 'category_pg_szsh;', '解禁': 'category_jj_szsh;', '公司债':
国
国
中
中
'category_gszq_szsh;','可转让债': 'category_kzzq_szsh;', '其他融资': 'category_qtrz_szsh;', '股权变动':
'category_gqbd_szsh;',补充更正': 'category_bcgz_szsh;', '澄清致歉': 'category_cqdq_szsh;', '风险提示':
'category_fxts_szsh;','特别处理和退市': 'category_tbclts_szsh;', '退市整理期': 'category_tszlq_szsh;'
C
C
O
O
O
O
}
M
M
学
学
大
大
54
国
国
中
中
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 2. 筛选公告
大
大
国
国
中
中
url2 = "http://www.cninfo.com.cn/new/hisAnnouncement/query"
requestbody = {
C
C
O
O
'stock': '{},{}'.format(code, orgId),
O
O
M
M
'category': category, # 公告分类
学
学
大
大
国
国
'seDate': start_date + '~' + end_date,
中
中
#其余参数详见完整代码
}
C
C
data = json.loads(res.post(url2, headers=headers, data=requestbody).content)
O
O
O
O
reports_list = data['announcements'] # 提取announcements内容
M
M
学
学
大
大
国
国
中
中
C
C
O
O
O
O
M
M
学
学
大
大
55
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 2. 筛选公告
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
56
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
M
M
学
学
大
大
国
国
中
中
应用1:巨潮资讯网
C
C
O
O
O
O
M
M
学
学
• 3.下载文件
大
大
国
国
中
中
• 循环遍历筛选结果中的全部公告标题以及公告 url
C
C
• 在循环体中,补全 url 前缀,批量发送 GET 请求
O
O
O
O
M
M
学
学
• 新建文件对象,将公告标题作为文件名,补全 pdf 后输出结果
大
大
国
国
中
中
#批量下载PDF文件
for report in reports_list:
C
C
O
O
file_name = report['announcementTitle']
O
O
M
M
pdf_url = "http://static.cninfo.com.cn/" + report['adjunctUrl']
学
学
大
大
print('正在下载:' + pdf_url, '存放在当前目录:' +file_name)
国
国
中
中
time.sleep(2) # 暂停2秒,等待网页加载
r = res.get(pdf_url)
C
C
O
O
O
O
f = open(file_name + ".pdf", "wb")
M
M
学
学
f.write(r.content)
大
大
57
国
国
中
中
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 3.下载文件
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
58
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M • 总结:M M M M
O O O O
O O O O
C C C C
中 中
基本信息 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
应用1:巨潮资讯网
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
文件,返回包含公告标题、公告 url 的数据
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
• 功能三:将功能二筛选后的公告文件批量下载为 pdf 格式
返回的结果传递给功能三,最后再由功能三完成下载任务
M M M M M
O O O O
O O O O
C C C C
• 功能一:输入搜索关键词,在巨潮资讯网中搜索股票,返回股票
• 这三个功能环环相扣,功能一返回的结果传递给功能二,功能二
• 功能二:输入公告分类、日期范围,筛选功能一选定股票的公告
中 中 中 中 中
59
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大
• 第一步,读懂API用户文档 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 第二步,选取合适的函数并设置参数获取数据
中 中 中 中 中
国 国 国 国 国
• API获取数据显得比较简单,主要分为两步:
大 大 大 大 大
学 学 学 学 学
M M M M M
应用2:Tushare库金融数据获取
O O O O
O O O O
• 在掌握爬虫的同时也需要熟练利用API来获取数据
C C C C
口供我们调用,如果没有再考虑自己编写爬虫来获取
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• Tushare库是常用的获取金融数据的平台(https://tushare.pro)
• 当我们遇到数据需求时,往往是先搜索是否有对应的数据API接
中 中 中 中 中
60
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
is_new
is_new
in_date
ts_code
hs_type
名称
hs_type
O O O O
名称
out_date
O O O O
C C C C
str
str
str
str
str
str
str
中 中 中 中 中
国 国 国 国 国
类型
类型
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
Y
Y
Y
Y
Y
O O N O O
Y
C C C C
• 1.读懂API用户文档
必选
默认显示
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
TS代码
C C C C
剔除日期
纳入日期
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
是否最新 1是 0否
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
类型SH沪股通SZ深股通
沪深港通类型SH沪SZ深
描述
描述
是否最新 1 是 0 否 (默认1)
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
应用2:Tushare库金融数据获取
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• hs_const:Tushare库接口沪深股通基本信息接口输入和输出参数
中 中 中 中 中
61
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
pro = ts.pro_api()
#获取深股通成分
#获取沪股通成分
中 中 中 import tushare as ts 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
ts.set_token('用户的token')
M M M M M
#利用Tushare获取金融数据
O O O O
O O O O
C C C C
df_sz = pro.hs_const(hs_type='SZ')
df _sh= pro.hs_const(hs_type='SH')
中 中 中 中 中
#初始化对象,用户token需注册后获取
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
• 2.选取合适函数并设置参数获取数据
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
应用2:Tushare库金融数据获取
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
62
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
本章总结
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
进行解析和提取
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
• 网络爬虫的基本思想:信息获取和信息解析
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
• 信息获取:Curl,Requests库,Selenium库以及API获取
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
• 案例:巨潮网上市公司公告文本爬虫和Tushare库的API数据
O O O O
爬虫技术作为获取和处理非结构化数据的工具逐渐受到重视
C C C C
查看页面源代码、如何利用Beautiful Soup、XPath等模块对信息
• 信息解析:爬虫所获取HTML信息的结构、如何利用开发者工具
• 大数据时代下,结构化数据已经不能满足实际问题的需求,网络
中 中 中 中 中
63
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
谢谢!
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C
中 中 中 中 中
国 国 国 国 国
大 大 大 大 大
学 学 学 学 学
M M M M M
O O O O
O O O O
C C C C