作者丨Justin Yek
译者丨平川
互联网上的信息如此之多,任何人穷其一生也无法悉数消化吸收。你需求的不是拜访这些信息,而是一种可弹性的办法,能够用来搜集、安排和剖析这些信息。你需求的是 Web 爬取。Web 爬取能够主动提取数据,并以一种让你能够轻松了解的格局显现出来。Web 爬取能够用于许多场景,但本教程即将点介绍它在金融市场中的运用。
互联网上的信息如此之多,任何人穷其一生也无法悉数消化吸收。你需求的不是拜访这些信息,而是一种可弹性的办法,能够用来搜集、安排和剖析这些信息。
你需求的是 Web 爬取。
Web 爬取能够主动提取数据,并以一种让你能够轻松了解的格局显现出来。Web 爬取能够用于许多场景,但本教程即将点介绍它在金融市场中的运用。
假如你是一名疯狂的投资者,每天获取收盘价可能是一件比较苦楚的工作,尤其是当你需求的信息需求检查多个网页才干找到的时分。咱们将经过构建一个网络爬取器,从互联网上主动检索股票指数,简化数据提取。
准 备
咱们将运用 Python 作为爬取言语,并运用一个简略而强壮的库 BeautifulSoup。
关于 Mac 用户而言,OS X 预装了 Python。翻开终端,输入 python --version。你应该能够看到 Python 的版本是 2.7.x。
关于 Windows 用户,请经过官方网站装置 Python。
接下来,咱们需求运用 pip(一个 Python 包管理工具)获取 BeautifulSoup 库。
在终端输入:
留意:假如你运转上述指令失利,试下在每一行前面加上 sudo。
底子概念
在一头扎进代码之前,让咱们先了解下 HTML 的底子概念和一些爬取规矩。
HTML 标签
假如你现已了解了 HTML 标签,大能够越过这部分。
这是 HTML 页面的底子语法。每个服务于网页里的一个块:
:HTML 文档有必要以类型声明开端。
HTML 文档包括在和之间。
HTML 文档的 meta 和 script 声明坐落和之间。
HTML 的可视部分坐落和标签之间。
标题的界说经过标签 到 。
阶段运用
标签界说。
其他有用的标签还有超链接标签、表格标签、表格行标签、表格列标签。
此外,HTML 标签有时带有 id 或 class 特点。id 特点为 HTML 标签指定一个专一的 id,而且该值在 HTML 文档中有必要是专一的。class 特点用于为具有相同 class 的 HTML 标签界说相同的款式。咱们能够运用这些 id 和 class 协助定位咱们想要的数据。
要了解关于 HTML 标签、 id 和 class 的信息,请查阅 W3Schools 教程。
爬取规矩
你应该在爬取之前检查网站的条款和约束。请仔细阅读关于合法运用数据的声明。一般,你搜集的数据不运用于商业意图。
用你的程序从网站恳求数据时不要过激(也称为滥发),因为这可能会对网站形成损坏。保证你的程序以一种合理的办法运转(即体现得像个人)。每秒恳求一个页面是很好的做法。
网站的布局可能会不时发生变化,所以一定要从头拜访网站,并根据需求重写代码。
检查页面
作为比方,让咱们看一个来自 Bloomberg Quote 网站的页面。
作为重视股票市场的人,咱们期望从这个页面上获取指数称号(规范普尔 500)及其价格。首要,右键单击并翻开浏览器检查器来检查网页。
测验把鼠标悬停在价格上,你应该能够看到一个蓝框。单击它,就能够在浏览器操控台中挑选相关的 HTML。
从中咱们能够看到,价格坐落多层 HTML 标签之中,即
。
相似地,假如你将鼠标悬停并单击称号“S&P 500 Index”,就会看到它坐落
和中。
现在,咱们现已凭借 class 标签知道了数据的仅有方位。
进入代码
现在,咱们现已知道咱们想要的数据在哪,咱们能够开端编写 Web 爬取器了。现在,翻开编辑器。
首要,咱们需求导入咱们即将用到的库。
接下来,声明一个保存页面 URL 的变量。
然后,运用 Python urllib2 获取上述 URL 指向的 HTML 页面。
最终,将页面解析成 BeautifulSoup 的格局,这样咱们就能够运用 BeautifulSoup 处理它了。
现在,咱们有一个包括页面 HTML 的变量 soup。从这儿开端咱们能够编写提取数据的代码了。
还记得咱们需求的数据所独有的标签层次吗?BeautifulSoup 能够协助咱们进入这些层,并运用 find() 提取内容。在本例中,因为 HTML class 特点的称号在这个页面上是专一的,所以咱们能够简略地查询
。
在找到标签之后,咱们就能够经过获取其 text 特点来获取数据。
相似地,咱们也能够获取指数价格。
运转程序,你应该能够看到它给出了规范普尔 500 指数的价格。
导出到 Excel CSV
现在咱们要保存获取到的数据了。Excel 逗号分隔格局是一个不错的挑选。它能够在 Excel 中翻开,这样你就能够看到数据并轻松地处理它。
可是首要,咱们有必要导入 Python csv 模块和 datetime 模块来获取记载日期。将以下代码刺进导入部分。
在代码底部增加将数据写入 CSV 文件的代码。
现在运转程序,你应该就能够导出到 index.csv 文件,然后你就能够用 Excel 翻开,其间应该包括如下这行数据。
这样,你每天运转下这个程序就能够轻松取得规范普尔 500 指数的价格了,就不用在网站上翻来翻去了。
进一步探求(高档用法)
多指数
对你而言,爬取一个指数并不够用,对吗?咱们能够测验下一起提取多个指数。
首要,将 quote_page 改成 URL 数组。
然后,将数据提取代码放入一个 for 循环,它会逐一处理数组中的 URL 并将一切数据以元组的方式保存到变量 data 中。
修正数据保存部分,逐行保存数据,
运转这个程序,应该就能够一起提取两个指数了。
高档爬取技能
BeautifulSoup 十分简略,适合于小规划 Web 爬取。可是,假如你对更大规划的数据爬取感兴趣,就应该考虑下下面这些选项:
Scrapy 是一个十分强壮的 Python 爬取结构。
测验在你的代码中集成一些公共 API。数据检索的功率会远远高于爬取网页。例如,看看 Facebook Graph API ,它能够协助你取得 Facebook 网页上没有显现的躲藏数据。
当数据变大时,考虑运用相似 MySQL 这样的数据库后端来存储数据。
选用 DRY 办法
DRY 的意思是“不要重复你自己”,试着像这个人相同主动化你的日常使命。还能够考虑其他一些风趣的项目,比方盯梢 Facebook 上朋友的活动时刻(当然要征得他们的赞同),或许在论坛上列出一些论题,并测验自然言语处理(这是现在人工智能的热门论题)!假如有任何问题,请在下面留言。
https://medium.com/free-code-camp/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe
今天荐文
从木匠活儿到野外大冒险,程序员有多斜杠?你底子幻想不到丨二叉树视频
点个在看少个 bug