编者按:斯克里普斯研究所数据科学家Michael Galarnyk介绍了如何使用Scrapy爬取网站数据。
我刚开始在业界工作时,首先意识到的一件事情是,有时候需要自己收集、整理、清洗数据。在这篇教程中,我们将从一个众筹网站FundRazr收集数据。和许多网站一样,这个网站有自己的结构、形式,还有众多有用的数据,但却没有一个结构化的API,所以获取数据并不容易。在这篇教程中,我们将爬取网站数据,将其整理为有序的形式,以创建我们自己的数据集。
我们将使用Scrapy,一个构建网页爬虫的框架。Scrapy可以帮助我们创建和维护网页爬虫。它让我们可以专注于使用CSS选择器和XPath表达式提取数据,更少操心爬虫的内部工作机制。这篇教程比Scrapy官方教程要深入一点,希望你在读完这篇教程后,碰到需要抓取有一定难度的数据的情况时,也能自行完成。好了,让我们开始吧。
预备
如果你已经安装了anaconda和google chrome(或Firefox),可以跳过这一节。
安装Anaconda。你可以从官网下载anaconda自行安装,也可以参考我之前写的anaconda安装教程(Mac、Windows、Ubuntu、环境管理)。
安装Scrapy。其实Anaconda已经自带了Scrapy,不过如果遇到问题,你也可以自行安装:
conda install -c conda-forge scrapy
确保你安装了chrome或firefox. 在这篇教程中,我将使用chrome.
创建新Scrapy项目
用startproject命令可以创建新项目:
该命令会创建一个fundrazr目录:
fundrazr/
scrapy.cfg # 部署配置文件
fundrazr/ # 项目的Python模块
__init__.py
items.py # 项目item定义
pipelines.py # 项目pipeline文件
settings.py # 项目设置文件
spiders/ # 爬虫目录
__init__.py
scrapy startproject fundrazr
使用chrome(或firefox)的开发者工具查找初始url
在爬虫框架中,start_urls是爬虫开始抓取的url列表。我们将通过start_urls列表中的每个元素得到单个项目页面的链接。
下图显示,选择的类别不同,初始url也不一样。黑框高亮的部分是待抓取的类别。