在上一篇安装Scrapy后,我们使用一个简单的Demo快速体验下。
创建项目
先创建一个存放源代码的目录,例如Codes。在cmd中进入到该目录,使用Scrapy命令添加项目:
scrapy startproject fastDemo
输出:
New Scrapy project 'fastDemo', using template directory 'D:\Software\Anaconda3\lib\site-packages\scrapy\templates\project', created in:
F:\Codes\fastDemo
You can start your first spider with:
cd fastDemo
scrapy genspider example example.com
添加成功后,即会自动创建fastDemo,目录下的内容有:
│ scrapy.cfg #部署配置文件
│
└─fastDemo
│ items.py #项目项定义文件
│ middlewares.py #中间件
│ pipelines.py #管道
│ settings.py #项目配置文件
│ __init__.py
│
├─spiders #爬虫目录
│ │ __init__.py
│ │
│ └─__pycache__
└─__pycache__
创建爬虫
将cmd定位到fastDemo目录,使用scrapy创建爬虫:
scrapy genspider demo www.mirthsoft.com
其中genspider的命令格式是:
scrapy genspider [-t template] name domain
其中-t可以以scrapy预定义的爬虫模板作为基础,目前有:
basic
crawl
csvfeed
xmlfeed
不指定是为basic。执行后在spiders目录下,自动创建了demo.py,默认内容如下:
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['www.mirthsoft.com']
start_urls = ['http://www.mirthsoft.com/']
def parse(self, response):
pass
其中:
name 爬虫名称
allowed_domains 爬虫爬取的域名列表,超出这个范围的不会爬取
start_urls 爬虫的启动地址
如果我们不希望直接指定启动地址,例如启动的时候希望从数据库或其它位置获取启动地址时,可以这样:
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['www.mirthsoft.com']
#start_urls = ['http://www.mirthsoft.com/']
def parse(self, response):
pass
def start_requests(self):
urls = [
'http://www.mirthsoft.com'
]
for url in urls:
yield scrapy.Request(url = url, callback=self.parse)
如代码,如果使用start_requests,需要返回一个Request的生成器。parse是爬取后的处理方法,可以在Request对象中指定为其它名称。在这里先将爬取到的数据保存到HTML中,如下:
def parse(self, response):
with(open("demo.html", "wb")) as f:
f.write(response.body)
这样一个爬虫的基础代码就完成了。
执行爬虫
如果需要运行爬虫,可以在cmd中定位到fastDemo目录,执行:
scrapy crawl demo
执行后,会输出大量日志,如果执行成功,则可以查到保存的文件和类似如下的输出:
2019-12-25 17:15:26 [scrapy.core.engine] INFO: Spider opened
2019-12-25 17:15:26 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-12-25 17:15:26 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2019-12-25 17:15:27 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.mirthsoft.com/robots.txt> (referer: None)
2019-12-25 17:15:27 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.mirthsoft.com> (referer: None)
2019-12-25 17:15:27 [scrapy.core.engine] INFO: Closing spider (finished)
相关链接
安装Scrapy:http://www.mirthsoft.com/post/2019/12/22/scrapy-install
官方文档:https://docs.scrapy.org/en/latest