Scrapy定向爬虫教程(一)——创建运行项目和基本介绍
2017-05-06 15:21
323 查看
前言
目前网上的Scrapy中文教程比较少,而且大多教程使用的Scrapy版本较老,比如说这个Scrapy 0.25 文档,如其名,上古时期的翻译文档;再比如极客学院的视频教程使用的是1.0.x版本,跟新版相比还是有出入。这种情况使得新手入门Scrapy较为困难,而且各种掉坑。本人也是只刚入门的菜鸟,我希望能用菜鸟的语言给其他想要踏进Scrapy大门的小菜鸟指引一条道路。至少比我踩得坑少点吧^-^。开发环境
Ubuntu 16.04Python 2.7.12
Scrapy 1.1.2
PyCharm 2016.1.4
介绍
本教程将带领大家写一个爬取Discuz模板论坛网站的定向爬虫,网上的Discuz论坛数不胜数,当然我也不敢公开在这教唆大家去侵犯某一个,只好祭出自己搭的论坛来供大家练习——心韵论坛。当然,既然是Discuz模板,用哪个网站做教程都是大同小异的。有了思路后,其他网站也会触类旁通。本教程分为以下八个部分,将分为八篇博文向大家介绍:Scrapy安装与项目创建
通过Selector选择器解析页面获取内容
爬取多个页面
数据存入MongoDB
保持登陆状态
分析表单并回帖
使用代理
结束邮件通知
好,废话不多说,我们进入第一部分。
Scrapy安装
既然选择了Scrapy,那么使用Linux对你来说也是家常便饭了吧,安装教程请戳链接Ubuntu16.04安装Scrapy命令新建项目
首先进入你想创建项目的目录,我为了方便,就直接在home目录下建项目了,因为我们要爬取的网站域名是heartsong.top,为了方便识别,我们把项目的名字起做heartsong,在命令行中输入以下命令:scrapy startproject heartsong1
1
输出信息如图,表示项目创建成功
项目结构
我们通过PyCharm打开项目发现默认生成的项目有如下结构
我们发现,默认生成的项目有下列几个文件
*
__init__.py× 2
*
items.py
*
pipelines.py
*
settings.py
*
scrapy.cfg
在这几个文件中,两个
__init__.py和
scrapy.cfg是用不到的,不多说。下面,我们来介绍一下我们在今后用的到的文件的基本用途
items.py
双击打开这个文件,看一下都初始化了什么东西# -*- coding: urf-8 -*- # Define here the models for your scrapyed items # # See documentation in # http://doc.scrapy.org/en/latest/topics/items.html import scrapy class HeartsongItem(scrapy.Item): # define the fields for your item here like: # # name = scrapy.Filed() pass1
9
10
通过里面的注释可见,这个文件的作用是定义我们要爬取信息的标准格式,打个比方说,如果我们要爬取一批人的个人信息,包括姓名,性别,生日,那么我们可以这样来书写这个文件
import scrapy class HeartsongItem(scrapy.Item): name = scrapy.Filed() sex = scrapy.Filed() birthday = scrapy.Filed()6
易见本文件只是定义了一个类,至于什么时候实例化它,怎么保存它,请继续了解下面的内容。
settings.py
如其名,这是本项目的配置文件,里面注释着很多常用的配置项,我们通过在其他文件中引入本文件的方式来使用这些配置项。当然,我们可以把这些注释都删掉,等需要开启哪个功能的时候再另行编辑。
我们此处先看看默认打开的配置项吧
BOT_NAME = 'heartsong' SPIDER_MODULES = ['heartsong.spiders'] NEWSPIDER_MODULE = 'heartsong.spider' # Obey robots.txt rules ROBORSTXT_OBEY = True1
因为我们写的是定向爬虫,前面三个按默认即可,我们不去管他。看第四项,注释里说这个配置项的意思是是否遵守
robots.txt,那么
robots.txt是个什么东西呢?
通俗来说,
robots.txt是遵循Robot协议的一个文件,它保存在网站的服务器中,它的作用是,告诉搜索引擎爬虫,本网站哪些目录下的网页不希望你进行爬取收录。在Scrapy启动后,会在第一时间访问网站的
robots.txt文件,然后决定该网站的爬取范围。
当然,我们并不是在做搜索引擎,而且在某些情况下我们想要获取的内容恰恰是被
robots.txt所禁止访问的。所以,我们就将此配置项设置为
False,拒绝遵守Robot协议!
pipelines.py
双击打开这个文件,看看都初始化了什么东西# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html class HeartsongPipeline(object): def process_item(self, item, spider): return item1
从注释中所能得到的信息微乎其微,只告诉我们要启用此文件的话必须要在
settings.py里配置一下
ITEM_PIPELINES,好,那我们就老老实实的去
settings.py里配置一下吧,不过注意,此处有坑,在1.0.x版本(极客学院教程中使用),配置项用list格式来书写,而在最新的1.1.2版本中,需要用dict格式,否则会报错,无法爬取,配置好后,我们的
setting.py如下:
# -*- coding: utf-8 -*- BOT_NAME = 'heartsong' SPIDER_MODULES = ['heartsong.spiders'] NEWSPIDER_MODULE = 'heartsong.spider' ROBORSTXT_OBEY = True ITEM_PIPELINES = { 'heartsong.pipelines.HeartsongPipeline': 300, }1
此处的300表示优先级,因为本项目只用到这一个pipeline,所以随意取0-1000中的一个数值即可。
好,镜头切回
pipelines.py,这个文件到底有什么用呢?当然用处很多啦,本教程中介绍的作用只有两个:
* 对爬取到的数据(Item)进行处理,比如存入数据库
* 爬虫结束时产生事件,比如发送一封邮件
此处只是介绍一下,具体的操作要看后续教程。
爬虫呢?
默认生成的项目结构至此我们已经介绍完了,可是我们是来做爬虫的吧,爬虫呢?莫急莫急,互联网上的网站数不胜数,变化多端,我们的爬虫当然不可能一成不变,所以爬虫文件我们需要自己定义。爬虫
在默认生成的spiders目录下新建
heartsong_spider.py,我们的爬虫就写在这里面,因为是介绍,那么此处就写个简单的下载网站的主页,让大家能运行一下,感受一下scrapy。
import scrapy class HeartsongSpider(scrapy.spiders.Spider): name = "heartsong" # 爬虫的名字,执行时使用 allowed_domains = ["heartsong.top"] # 允许爬取的域名,非此域名的网页不会爬取 start_urls = [ "http://www.heartsong.top" # 起始url,此例只爬这一个页面 ] def parse(self, response): # 真正的爬虫方法 html = response.body # response是获取到的来自网站的返回 # 以下四行将html存入文件 filename = "index.html" file = open(filename, "w") file.write(html) file.close()1
要说明的是,这个类不是随心所欲来写的,
name,
allowed_domains,
start_urls,都是类似于”重载”的值。也就是说,scrapy内部会检测这些变量的值,变量名不可以起成其它的名字,类似的变量之后还会有介绍。至于
parse方法,就是重载的父类的方法,我们爬虫的主体一般就写在这里面。
好,现在让我们来运行它
在命令行中进入heartsong目录下,执行命令
scrapy crawl heartsong
此处的名字heartsong是与爬虫类中的
name保持一致。
输出的信息还是比较多的,我就不截完了。
来到heartsong目录下看看有没有下载成功
双击点开看看
发现很OK。
小结
本部分介绍了Scrapy的下载,创建项目,基本文件,运行程序这一部分入门知识,在下一个部分中,我们将学习如何使用Selector选择器在网页中提取我们想要的内容。相关文章推荐
- Scrapy定向爬虫教程(一)——创建运行项目和基本介绍
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)
- iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
- Maven简明教程(3)---在eclipse中创建工程与基本命令介绍
- ASP.NET MVC入门教程(一)项目介绍与数据库的创建
- iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
- 图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)
- jHipster 3.4 创建最流行Java Web应用项目最简单的入门基本教程
- 最全Pycharm教程(9)——创建并运行一个基本的Python测试程序
- 图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)
- SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包
- spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例
- 最全Pycharm教程(9)——创建并运行一个基本的Python测试程序 --待整理
- jHipster3.4创建Java Web应用项目最简单的入门基本教程
- 最全Pycharm教程(9)——创建并运行一个基本的Python测试程序
- jHipster 3.4 创建最流行Java Web应用项目最简单的入门基本教程
- 在scrapy框架下创建爬虫项目,创建爬虫文件,运行爬虫文件
- 15.Hello World 项目创建与项目配置文件介绍 - IntelliJ IDEA 使用教程
- iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
- Unity创建项目及基本面板介绍