Scrapy的安装
1. Windows下安装流程:
方法一: 命令行执行pip install scrapy 安装scrapy
注意:如果有miniconda,也可以打开“Anaconda prompt”,激活环境以后使用命令:conda install scrapy
方法二:当遇到lxml报错信息,可以进入非官方安装包下载对应版本的lxml.whl文件。其它依赖包缺失错误,或者不兼容错误,也可以下载对应的.whl文件,使用pip install 文件地址+文件名的方式安装
2. Mac系统安装流程:
可以直接使用pip install scrapy进行安装
如果没有安装pip,可是使用以下命令行语句先安装pip:
curl https://bootstrap.pypa.io/get-pip.py | python3
Scrapy爬虫的使用
一个基本的爬虫只需要两部分组成:Spider(爬虫)、Pipeline(管道)。
Spider是什么?
Spider
类定义了如何爬取某个(或某些)网站,包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是定义爬取的动作及分析某个网页(或者是有些网页)的地方。
管道是什么?
每个项目管道
组件是一个实现简单方法的Python类。他们接收一个项目并对其执行操作,还决定该项目是否应该继续通过流水线或被丢弃并且不再被处理。
管道的作用
Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,它的主要任务是清洗、验证和存储数据。当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数据。
项目管道的典型用途是:
- 清理HTML数据
- 验证抓取的数据(检查项目是否包含特定字段)
- 检查重复(并删除)
- 将刮取的项目存储在数据库中
第一个Scrapy项目
在命令行输入
scrapy startproject city_58
,建立Scrapy项目,提示如图即成功。image.png
得到如图的文件目录结构 image.png
scrapy框架文件解析:
-
city_58/
:该项目的python模块。之后您将在此加入代码 -
city_58/spiders/
:放置spider代码的目录,在命令行使用“scrapy genspider + 爬虫名”生成的 – – spider文件将会被存放在此目录下 -
city_58/items.py
:项目中的item文件 -
city_58/pipelines.py
:项目中的pipelines文件 -
city_58/settings.py
:项目的设置文件 -
scrapy.cfg
:项目的配置文件,一般不需要修改,也不能删除
-
在cmd中切换到city_58文件中,输入“scrapy genspider spider_city_58 58.com”,在spider下面生成spider_city_58文件,代码如下:
# -*- coding: utf-8 -*-
import scrapy
class SpiderCity58Spider(scrapy.Spider):
name = 'spider_city_58' #必不可少的属性,需要利用它去决定启动哪个爬虫
allowed_domains = ['58.com']
start_urls = ['http://58.com/'] #从start_urls中启动链接
def parse(self, response):
pass
Scrapy的基本方法和属性:
- 爬虫名称:name属性
- 启动方法:start_requests(),或者直接使用start_urls启动
- 默认解析器方法:parse()
- 启动链接列表:start_urls属性
我们使用Scrapy的启动命令的时候,需要知道它的name属性,利用name属性去决定启动那个爬虫。如本例中爬虫名字是“spider_city_58”,则可以在命令行中使用:
scrapy crawl spider_city_58
启动这个爬虫爬虫默认首先从start_urls里面读取链接,然后自动调用start_request函数(或者你也可以自己定义start_request函数),此函数请求的结果自动调用默认解析器parse,也就是调用parse处理返回来的response
- 启动Scrapy框架
为了方便知道请求到达了默认解析器parse,可以在解析器中输出一句话“我进入了解析器”
# -*- coding: utf-8 -*-
import scrapy
class SpiderCity58Spider(scrapy.Spider):
name = 'spider_city_58'
allowed_domains = ['58.com']
start_urls = ['http://58.com/']
def parse(self, response):
print('我进入了解析器')
启动方法:
第一种方法:打开命令行,切换到项目目录下,执行scrapy crawl spider_city_58
。
第二种方法:在项目中建立一个main.py文件,然后运行该文件即可。
from scrapy import cmdline
cmdline.execute("scrapy crawl spider_city_58".split())