Python数据抓取(1) —数据处理前的准备
(一)数据抓取概要
为什么要学会抓取网络数据?
对公司或对自己有价值的数据,80%都不在本地的数据库,它们都散落在广大的网络数据,这些数据通常都伴随着网页的形式呈现,这样的数据我们称为非结构化数据
如果我们能想出办法,把这些非结构化的数据转化为结构化的数据,在跟自己的本地数据库做匹配,做交叉分析,让它们关联起来,从而我们就能提炼出我们需要的有价值的数据。
如何将非结构化的数据转化为结构化的数据呢?
- 必须通过ETL的方法(数据抽取,转化、存储)
(二)抓取的逻辑—ETL
ETL是什么?
ETL是三个英文单词的缩写
- E:Extract (数据抽取)
- T:Transformation(数据转换)
- L:Loading(数据储存)
(三)数据抓取前的准备
1.“网络爬虫”架构
网络爬虫概要
网络爬虫不是一个新技术,自从网络时代开始,就有大量的人来撰写网络爬虫来获取资讯,比如说我们熟知的搜索引擎百度、谷歌等,它们最原始的技术就是网络爬虫技术。
大数据时代,这个“古老”的技术,又被重新重视起来
网络爬虫构架
2、如何理解“网络爬虫”架构
对量化投资策略进行研究,第一步就是获取我们需要的数据,在工作实践中,比较实用的数据源就是新浪财经的数据,下面我们以新浪财经为例,为大家梳理下网络爬虫的构架
我们用谷歌Chrome浏览器,打开新浪财经的股票博客板块http://blog.sina.com.cn/lm/stock/,这个Chrome浏览器就是网页链接器,当我们初入网址的时候,我们就会发出一个请求到新浪财经股票博客的网页上,网页收到请求以后就会把回应回传回来
我们在细看股票博客的页面,是花花绿绿的,除了内容和文字,还有图片和广告,当我们按下链接以后,想知道到底发生了什么事,我们可以透过Chrome的开发人员工具去观察这件事情。
3、以抓取一个网页的内容为目的,如何去观察一个网页
我们有新浪财经的股票博客信息,我们该如何把这些信息,包含标题和时间抓取出来?
(1)使用开发人员工具观察
开发人员工具在IE,在Chrome都有,这里jacky推荐功能更为齐全的Chrome;
点击所在网页的右键,选择检查,在开发人员工具下找到Network
- 如果Network里没有内容的话,可以点击网页重新加载
- 可以把Network当作一个网络窃听器,它可以监听我们送出什么请求,等到什么回应;
(2)观察Requests的构成
- 点击Filter(漏斗型)
本案例中,我们一共发出了106个requests,这些requests,包含XHR,JS,CSS,等
XHR:就是XMLHttpRequest 对象,换句话说就是ajax功能实现所依赖的对象;
XML是什么?见下图
ajax是什么?ajax的全称是AsynchronousJavascript+XML;异步传输+js+xml;所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果我们可以再来处理这个事。直白地说,就是没用AJAX的网页,你点一个按钮就要刷新一下页面,尽管新页面上只有一行字和当前页面不一样,但你还是要无聊地等待页面刷新。用了AJAX之后,你点击,然后页面上的一行字就变化了,页面本身不用刷。AJAX只是一种技术,不是某种具体的东西。不同的浏览器有自己实现AJAX的组件。
JS:让我们跟网页互动的程序;
CSS:网页的“化妆品”;
Img:载入的图片;
Media:影音数据;
Font:文字;
Doc:网页资料;
WS:websocket;
Manifest:宣告;
通常来讲,文章和新闻会放在Doc下,接下来我们要抓取的链接就藏在106个链接中的某个链接;
(3)观察HTTP请求与返回内容
我们可以在Document下找到文章与新闻类的内容,为什么呢?因为只要是上述类型内容的网页,它们都有被搜索引擎搜索到的需求,对于搜索引擎来讲,对Document的内容是最好的,所以绝大部分情况下,我们只要找到Document下的第一个链接,都可以准备的把文章与新闻类的内容爬取下来;只有极少部分才会看XHR还有其他的部分;下面,jacky(数据分析部落公众号:shujudata)分享一下实际的操作;
- 依次点击Network➡️Doc➡️stock/➡️Response
确定我们要抓取的内容在stock/链接下,而不是在其他链接里
- 首先快速浏览检查我们要抓取的内容在不在Response中,可以在网页的文章中比对关键词,如何网页内容巨大,可以把它们贴在txt中,使用查找比对;
确定网页的存取方法
在Headers中,我们看到网页是用get方法做存取的
什么是get方法?该如何理解get方法?
- 我们可以把 get的方法,想象成邮寄的信,网址的信息就写在“信封”上,我们送出的http请求就像把信邮寄出去一样,当网页的链接器看到这封信,了解我们的来意以后,此时就可以把对应的回应回传回来;接下来,我们该怎样写一个程序去模拟我们的浏览器送出get请求的过程呢?这时我们就要用到python了,
以上,我们观察网页后,我们会发现对应Response下的资料数据都放在html的页面里面,html包含着网页的标签 < div >,这些标签叙述着网页的行为,我们得到的回应是html,包含它的资料数据以及它的标签,这样的资料并不是结构化的资料,我们还需要进一步处理,那么如何把非结构性的数据处理为结构化的数据呢?请参阅jacky的第二次分享,谢谢大家!
Python数据抓取(1) —数据处理前的准备的更多相关文章
- python数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- Python数据抓取技术与实战 pdf
Python数据抓取技术与实战 目录 D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字 ...
- Python数据抓取_BeautifulSoup模块的使用
在数据抓取的过程中,我们往往都需要对数据进行处理 本篇文章我们主要来介绍python的HTML和XML的分析库 BeautifulSoup 的官方文档网站如下 https://www.crummy.c ...
- Python数据抓取(2) —简单网络爬虫的撰写
(一)使用Requests存储网页 Requests 是什么?网络资源(URLs)抓取套件 优点? 改善urllib2的缺点,让使用者以最简单的方式获取网络资源 可以使用REST操作(POST,PUT ...
- Python数据抓取(3) —抓取标题、时间及链接
本次分享,jacky将跟大家分享如何将第一财经文章中的标题.时间以及链接抓取出来 (一)观察元素抓取位置 网页的原始码很复杂,我们必须找到特殊的元素做抽取,怎么找到特殊的元素呢?使用开发者工具检视每篇 ...
- 数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
随机推荐
- 【hash】Seek the Name, Seek the Fame
[哈希和哈希表]Seek the Name, Seek the Fame 题目描述 The little cat is so famous, that many couples tramp over ...
- Till I Collapse CodeForces - 786C (主席树区间加,二分最小值)
大意: 给定序列, 将序列划分为若干段, 使得每段不同数字不超过k, 分别求出k=1...n时的答案. 考虑贪心, 对于某个k 从1开始, 每次查询最后一个颜色数<=k的点作为一个划分, 直到全 ...
- 10-MySQlL DBA笔记-基础知识
第四部分 运维篇 首先来了解一下数据库的定义,数据库是高效的.可靠的.易用的.安全的多用户存储引擎,我们可以通过它访问大量的持久化数据.我们管理和维护数据库,本质上也是要确保如上的特性,尽可能地保证数 ...
- dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
- [NOIP10.3模拟赛]3.w题解--神奇树形DP
题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需 ...
- LeetCode:178.分数排名
题目链接:https://leetcode-cn.com/problems/rank-scores/ 题目 编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同.请注 ...
- 第五章、Django之多表查询进阶与事务
目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...
- PMM 监控 MySQL
Percona Monitoring and Management (PMM)是一款开源的用于监控 MySQL 和 MongoDB 性能的开源平台,通过 PMM 客户端收集到的 DB 监控数据用第三方 ...
- ARM体系结构与编程读书笔记——处理器的寄存器
ARM处理器共有37个寄存器,其中包括: 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位: 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位: 通用寄存器 可以分为下面3 ...
- 双端队列 C. Vasya and String
High school student Vasya got a string of length n as a birthday present. This string consists of le ...