第二节:Scrapy版的Hello World
前置知识:
- 掌握Python的基础知识
- 对爬虫基础有一定了解
说明: 运行环境
Win10,Python3 64位
目录:
- 第一节:Scrapy介绍和安装配置
- 第二节:Scrapy版的Hello World
- 第三节:Scapy框架结构和组件介绍
本节演示如何建立一个scrapy项目和观察数据的流转过程。
这里以访问我的博客为例
1 创建项目
scrapy stratproject HelloScrapy
工程创建完成了,我们可以列出目录树
tree HelloScrapy /f
items负责数据模型的建立,类似于实体类。
middlewares.py自己定义的中间件。
pipelines.py负责对spider返回数据的处理。
settings.py负责对整个爬虫的配置。
spiders 目录 负责存放继承自scrapy的爬虫类。
scrapy.cfg scrapy基础配置
2 编写爬虫类
进入目录,创建一个爬虫spider,取名为MyblogSpider
cd HelloScrapy
命令格式
scrapy genspider [options]
这是和我们就能看到spiders目录下多了一个 MyblogSpider.py 文件,这就是我们编写代码的地方
打开 MyblogSpider.py 可以看到代码模版
我们输入的 name就作为了爬虫名字,domain作为开始url,这里start_urls里如果有重复的http头就修改一下
然后我们在parse函数里再加上一句打印日志,这样一个scrapy版的Hello world就好了
# -*- coding: utf-8 -*-
import scrapy
class MyblogspiderSpider(scrapy.Spider):
name = 'MyblogSpider'
allowed_domains = ['blog.youkuaiyun.com']
start_urls = ['https://blog.youkuaiyun.com/mist99/']
def parse(self, response):
print("*************** Hello Scrapy ********************")
然后我们可以在控制台直接运行这个爬虫:
scrapy crawl MyblogSpider
然后就能看到抓取网页成功的200标识,然后是parser里面我们刚才打印的日志,具体解析页面就以后再说。
这样我们的Hello World就执行成功了,虽然看起来有点莫名,这当然是因为scrapy中各个组件基类已经实现了。
3 Scrapy组件运行过程
从项目目录我们可以看到,工程中有item、spider、middleware、pipline、settings等一系列文件,那么在我们hello world项目运行中,它们是否都参与了项目过程呢,下面我们再增加一些日志来看
1)在item里面打开注释定义
class HelloscrapyItem(scrapy.Item):
# define the fields for your item here like:
print("【步骤】Item 定义结构")
name = scrapy.Field()
2)在MyblogSpider中重载一下页面请求的函数,再添加一些注释
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
from HelloScrapy.items import HelloscrapyItem
class MyblogspiderSpider(scrapy.Spider):
name = 'MyblogSpider'
allowed_domains = ['blog.youkuaiyun.com']
start_urls = ['https://blog.youkuaiyun.com/mist99/']
# 页面请求
def start_requests(self):
print("【步骤】SinaSpider::start_requests页面请求 ")
yield Request(self.start_urls[0])
def parse(self, response):
print("*************** Hello Scrapy ********************")
print("【步骤】SinaSpider::parse分析页面 ")
item = HelloscrapyItem()
item["name"] = "阿丹的彩蛋"
yield item
3)在 middlewares.py 中添加日志
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
print("【步骤】HelloscrapyDownloaderMiddleware中间件")
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
4)在 pipelines 中添加日志
from HelloScrapy.items import HelloscrapyItem
class HelloscrapyPipeline(object):
def process_item(self, item, spider):
if isinstance(item, HelloscrapyItem): # 先判断item
print("【步骤】pipelines处理数据")
return item
5)最后打开settings配置文件中的注释
DOWNLOADER_MIDDLEWARES = {
'HelloScrapy.middlewares.HelloscrapyDownloaderMiddleware': 543,
}
ITEM_PIPELINES = {
'HelloScrapy.pipelines.HelloscrapyPipeline': 300,
}
6)现在我们再运行一次爬虫
scrapy crawl MyblogSpider
输出结果:
这样整个项目中的数据流转过程就清楚了,下节继续总结组件知识。