最近稍微学习了下爬虫框架,以前都是裸写Requests和Beautifulsoup来从网页中获取我想要的数据,为了后面高效的爬虫,觉得还是应该认真学习一个爬虫框架,在Scrapy和Pysipder之间进行比较,最终还是选择了Scrapy,其基于异步框架twisted,先从用法入手,学习的过程中应该也会稍微接触点源码。本博客会记录下博主学习Scrapy的过程。
相关资料
环境搭建
Python版本:Python 3.6.5
安装方法:在类Linux/Unix下使用pip install scrapy
安装
我是在Docker中进行开发的,也推荐大家使用Docker,真的方便很多(如何安装和搭建Docker,可以在网上搜索到很多资料)。下面是我的Dockerfile文件。
From python:3
WORKDIR /usr/src/app
RUN apt-get update \
&& apt-get -y install vim \
&& apt-get -y install iputils-ping \
&& pip install --no-cache-dir --upgrade pip \
&& pip install scrapy \
&& apt-get -y remove --purge vim \
&& apt-get -y remove --purge iputils-ping
-
docker build -t python:scrapy .
,生成一个安装scrapy镜像; -
docker run -it python:scrapy bash
,进入docker环境。
这样的我们的环境就搭建好了。
Scrapy命令
Scrapy安装后会提供一个系统命令,如下:
root@e579691b5c9f:~/newproject# scrapy -h
Scrapy 1.5.0 - project: newproject
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
check Check spider contracts
crawl Run a spider
edit Edit spider
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
list List available spiders
parse Parse URL (using its spider) and print the results
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
Use "scrapy <command> -h" to see more info about a command
简要讲一下会经常用到的命令:
1. 创建新项目
scrapy startproject projectname
该命令会在当前目录下创建一个新目录,并自动在目录下创建需要的文件,用tree命令来看下目录结构。
root@e579691b5c9f:~# tree newproject/
newproject/
├── newproject
│ ├── __init__.py
│ ├── __pycache__
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
简单介绍下各个文件/目录的作用:
-
scrapy.cfg
:该文件所在的目录是项目的根目录,里面包含了项目部署的相关信息; -
items.py
:定义了爬虫要爬去的字段; -
middlewares.py
:定义相关的中间件,后面会知道如何编写中间件; -
settings.py
:项目的配置文件 -
pipelines.py
:管道文件,抓取后的item会被送到pipeline,你可以对数据清洗、数据持久化保存等,这是爬去的内容最后会被送到的地方。 -
spiders目录
:定义爬虫逻辑的地方,自己编写的spider都放在这个文件下面。
2. 创建一个新spider
scrapy genspider spider_name domain
该命令会在项目下面按照模板创建一个新的spider,当然,可以使用-t template_name
来指定使用的模板文件,scrapy提供了几种模板文件,具体可以使用命令scrapy genspider -l
查看,默认使用basic
模板文件。
3. 查看可用的spider
scrapy list
该命令会显示项目中可用的spider,同时也会进行语法检查。
4. 进入scrapy shell交互模式
scray shell [url]
该命令会进入scrapy shell模式,如果传了url
,会自动从抓取url,并生成response
对象,在这个模式下,可以进行简单的调试,用来看爬取规则是否生效。具体可见文档。
5. 执行爬虫
scrapy crawl spider_name
该命令会用来执行爬虫,默认会在stdout打印出爬虫log,可以带命令--nolog
来去小打印爬虫。还可以指定-o file_name
来讲爬取的内容输出到文件,scrapy支持json/csv/xml等格式的文件。
本篇只介绍一些常用的命令,剩余的命令可以通过scraoy command -h
来查看具体的用法。