前言
python中常用的写爬虫的库常有urllib2、requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现。这里有一篇我之前写过的用urllib2+BeautifulSoup做的一个抓取百度音乐热门歌曲的例子,有兴趣可以看一下。
本文介绍用Scrapy抓取我在博客园的博客列表,只抓取博客名称、发布日期、阅读量和评论量这四个简单的字段,以求用较简单的示例说明Scrapy的最基本的用法。
环境配置说明
操作系统:Ubuntu 14.04.2 LTS
Python:Python 2.7.6
Scrapy:Scrapy 1.0.3
注意:Scrapy1.0的版本和之前的版本有些区别,有些类的命名空间改变了。
创建项目
执行如下命令创建一个Scrapy项目
scrapy startproject scrapy_cnblogs
创建之后查看项目的目录结构如下:
scrapy_cnblogs
├── botcnblogs
│ ├── __init__.py
│ ├── items.py #用于定义抓取内容的实体
│ ├── pipelines.py #处理抓取的item的管道
│ ├── settings.py #爬虫需要的配置参数在这里
│ └── spiders
│ └── __init__.py
└── scrapy.cfg #项目的配置文件,可以不去理会,默认即可
其中scrapy.cfg所在的目录为项目的根目录,此文件是项目的配置文件,项目建立后,此文件的内容可以不用理会。其内容如下:
[settings]
default = botcnblogs.settings
[deploy]
#url = http://localhost:6800/
project = botcnblogs
在items.py文件里定义在抓取网页内容中抽象出来的数据结构的定义,由于这里需要博客名称、发布日期、阅读量和评论量这四个字段,定义的Item结构如下:
from scrapy import Item,Field #引入Item、Field
class BotcnblogsItem(Item):
# define the fields for your item here like:
title = Field() #标题
publishDate = Field() #发布日期
readCount = Field() #阅读量
commentCount = Field() #评论数<br data-filtered="filtered"><br data-filtered="filtered">
在pipelines.py里对爬虫抓取到的信息(这里的信息是已经组织好的上面定义的Item对象)进行处理,官方介绍的典型的应用场景为:
清理HTML数据
验证爬取的数据(检查item包含某些字段)
查重(并丢弃)
将爬取结果保存到数据库中