前言
有时候想法太多也不是个好事,最近想做的项目有三个:
- 上线毕设项目—微书
- 实现一个博客的评论系统—wecomment
- 实现一个图片上传工具,方便自己写博客—ldk-upload-img
谈正题,讲下自己学习scrapy的过程,以及如何写一个爬虫。学习一个新框架最好的方法就是去看它的官网,初次打开scrapy的官网,眼前一亮,让自己瞬间但觉到要是能掌握这门武技就能变成无敌黑客。

安装scrapy
-
windows 下安装
python 安装包的时候依赖关系复杂,有时候存粹使用pip install xxx并不能安装成功,我们得找条捷径。参考官网给的安装教程,我选择了使用anaconda。可是国内访问国外网站很慢,而且奇葩的时anaconda还很大,大概 400 多 M.。当我发现我睡了一觉起来还没有下载成功的时候,果断点击了取消下载。这里给大家推荐两个镜像: + 清华大学anaconda镜像 — https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/,如不能访问,请使用下面一个清华大学镜像还给了个替换corda下载源的方法,我试了下确实安装依赖速度上提升不少
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes+ 中国科学技术大学镜像 — http://mirrors.ustc.edu.cn总之呢,下载下来`anaconda`的安装`exe`文件,然后一直点击下一步`安装`就行。windows版本的`anaconda`还带有一个管理界面,安装包只需要搜索下,点击安装就好了。而且不用每次打开cmd去激活anaconda,管理界面也有打开cmd和Ipython的快捷方式。   -
linux 下安装
linux 下的安装和 window 下类似,只是是下载xxx.sh文件,最后就是阅读安装协议,配置安装地址之类的。
sudo ./xxx.sh
scrapy创建以及运行项目
创建项目,在终端中输入scrapy startproject first_spider,创建完成之后项目结构如下:
tutorial/
scrapy.cfg # 部署爬虫的配置文件
tutorial/ # 项目根目录
__init__.py
items.py # 定义每个爬虫需要爬取的数据结构
pipelines.py # 处理爬虫得到的数据,去重,存入数据库
settings.py # 爬虫设置
spiders/ # 爬虫目录,放置所有的爬虫
__init__.py
- 新建一个爬虫 axdzs
# genspider后面的第一个参数是爬虫的名称,第二个是爬虫爬取的网址
scrapy genspider quotes quotes.toscrape.com
- 修改 spiders 目录下新生成的 quotes.py 文件为如下代码:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes" # 定义爬虫的名字
# 发送请求
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
# 处理请求返回的数据
def parse(self, response):
# response相当于一个html对象,里面包含原页面所有html元素
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
# 打开文件,将response存储进去
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
- 运行爬虫
scrapy crawl quotes
在控制台看到如下输出,并且项目根目录下多了两个文件 — quotes1.html 和 quotes2.html:
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Spider opened
2016-12-16 21:24:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-12-16 21:24:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/2/> (referer: None)
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-1.html
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-2.html
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Closing spider (finished)
如此一个最简单的爬虫就写好了,有木有很简单?在接下来的文章,我将继续介绍 scrapy 的进阶内容,敬请期待~