使用 python 和 beautifulsoup 来做爬虫抓取 | python优质外文翻译 | python 技术论坛-金年会app官方网
互联网上有许多许多的信息使人类穷极一生也无法全部掌握。其实我们需要的不是去访问这些信息而是有一个可扩展的方法去收集,组织并分析这些信息。
这里我们需要网页抓取。
网页抓取会自动的提取数据且按照较为容易理解的格式美化数据。在本教程中,我们将重点介绍网页抓取在金融市场的应用,但是要强调的是网页抓取可以适用于各种情况。
如果你是一位狂热的投资人,获取每日的收盘价格有时候是一个挺累人的事,尤其是你需要获取的信息分布于多个页面。接下来我们将开发一个爬虫,来自动从互联网上抓取这些股票数据。
入门
我们将使用 python 做为我们的爬取语言,再加上一个简单而强大的库, beautifulsoup。
- 对于 mac 用户,python 已经预先安装在 os x 中。打开终端并且输入
python --version
。你应该看到你的 python 版本是 2.7.x. - 对于 windows 用户,请通过安装 python。
接下来我们需要使用一个 python 的包管理工具 pip
来安装 beautifulsoup 库。
在终端输入:
easy_install pip
pip install beautifulsoup4
注意:如果你执行上面的命令行时失败量,试着增加 sudo
到每一行的前面。
基础
在我们开始进入代码部分前,让我们来了解一下 html 的基础以及关于爬取的一些规则。
html tags
如果你已经知道了 html 标签的含义,并且感觉很轻松的话可以跳过这部分。
hello world
这是 html 网页最基础的符号。每一个
都服务于网页的一块区域:
1. : html 文档的开头必须以一个文档类型声明开始;
2. html 文档被储存在 标签与
标签之间;
3. meta 声明与 script 声明必须在 标签与
标签之间 ;
4. html 文档可见的部分位于 标签与
标签之间;
5. 文章的抬头从大到小被定义成
标签;
6. 文章段落被定义成
标签。
其他有用的标签包括:
被表示为表格的单元格。
大部分的 html 会有 更多关于 html , 和 ,请参阅 。 爬取规则:
审查页面元素让我们来以 网站做为列子。 首先我们需要获取 s&p 500 的数据,在此页面右键调出浏览器菜单,选择『审查元素』: 将鼠标移到价格的元素上时,应该可以看到一个小框框,点击后你应该可以看到浏览器控制台的这个元素对应的 html 会被选中: 我们可以看到价格在几个层级的 html 标签下: →
→
.
相同的,如果你将鼠标悬浮并点击 "s&p 500 index" 的话,也可以看到其处于 和
开始编写代码现在我们知道了我们想要的数据所在的位置, 现在就可以编写我们的网络爬虫。 请打开你的文本编辑器! 首先, 我们需要导入即将需要所有的库。
下一步, 定义一个变量来保存目标网页的 url 。
然后,利用 python 的 urllib2 库获取上一步指定 url 的 html 源码。
最后,将这个 page 变量的内容用 beautifulsoup 格式化,就可以使用beautifulsoup 做进一步的处理。
现在我们获得了一个 接下来我们可以使用 beautifulsoup 提供的 来获取我们的数据:
一旦我们获取掉标签,我们即可使用
同样的,使用以下方法来获取价格:
当你运行程序时,你应该可以看到 s&p 500 的价格: 导出 excel csv 格式接下来我们需要将收集的数据导出,在导出文档格式选择中,excel 的 csv 逗号分隔文档是一个不错的选择,这样你就可以直接通过 excel 打开并进行简单的数据处理。 不过我们需要先导入 python 的 csv 模块,请在你的模块导入区域里加上以下代码:
在代码的最底部,添加以下代码:
现在当你允许程序时,即可看到一个 现在你可以使用这个程序来替你获取 s&p 500 index 的价格数据了。 更近一步 (高级用户)多个索引 首先,修改
接着我们把数据提取码改成
另外,修改保存部分以逐行保存数据。
重新运行该程序,您应该能够同时提取两个索引! 高级爬取技术beautifulsoup 非常简单,非常适合小规模的网页抓取。但是如果您有兴趣更大规模地抓取数据,您应该考虑使用这些其他备选方案:
采用 dry 方法dry 表示 “不要重复你自己”,像 一样尝试将你的日常工作自动化。一些其他有趣的项目如考虑跟踪你 facebook 朋友的活跃时间(当然要征得他们的同意),或者抓取论坛的主题列表并尝试一下自然语言处理(这是目前热门的人工智能话题)! 如果您有任何问题,请随时在下面留言。 参考\ 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
讨论数量:
(= ̄ω ̄=)··· 暂无内容!
|