1.目标
这两天要弄一个大作业,从水木社区和北大未名社区的实习板块,爬取实习信息,保存在MongoDB数据库。
正好想学习一下scrapy框架的使用,就愉快地决定用scrapy来实现。
2.介绍
Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。使用了 Twisted 异步网络库来处理网络通讯。整体架构:
学习使用Scrapy,最重要的是官方文档。本文的主要参考资料也是该文档。
Scrapy的安装,这里就不说了,在满足一系列依赖的安装以后,pip一下,就搞定了。
pip install scrapy
3.开始
3.1 首先,新建一个Scrapy工程。
进入你的目标目录,输入以下指令,创建项目intern。
$ scrapy startproject intern
目录结构如下:
.
├── scrapy.cfg
└── intern
├── __init__.py
├── items.py
├── pipelines.py
├── settings.py
└── spiders
└── __init__.py
这个目录结构要熟记于心。
scrapy.cfg: 全局配置文件
intern/: 项目python模块
intern/items.py: 项目items文件,定义爬取的数据保存结构
intern/pipelines.py: 项目管道文件,对爬取来的数据进行清洗、筛选、保存等操作
intern/settings.py: 项目配置文件
intern/spiders: 放置spider的目录
3.2 编写items.py文件。
定义item的字段如下:
import scrapy
class InternItem(scrapy.Item):
title = scrapy.Field()
href = scrapy.Field()
author = scrapy.Field()
time = scrapy.Field()
content = scrapy.Field()
is_dev = scrapy.Field()
is_alg = scrapy.Field()
is_fin = scrapy.Field()
base_url_index = scrapy.Field()
定义的方法很简单,每个字段都=scrapy.Field()即可。
使用:比如要使用某item的title,就像python中的dict一样,item[‘title’]即可。
3.3 编写爬虫。
好了终于到了编写爬虫了。以爬取水木社区的爬虫为例。在spiders目录下,创建smSpider.py。
class SMSpider(scrapy.spiders.CrawlSpider):
'''
#要建立一个 Spider,你可以为 scrapy.spider.BaseSpider 创建一个子类,并确定三个主要的、强制的属性:
#name :爬虫的识别名,它必须是唯一的,在不同的爬虫中你必须定义不同的名字.
#start_urls :爬虫开始