安装
pip install --upgrade pip 
pip install Scrapy
爬取步骤
- 新建项目
 - 明确目标
 - 制作爬虫
 - 存储内容
 
新建项目
scrapy startproject FTry

- scrapy.cfg 配置文件
 - items.py 项目的目标文件
 - pipelines.py 项目的管道文件
 - settings.py 项目设置文件
 - spiders 存储爬虫代码目录
 
明确目标
scrapy genspider baidu www.baidu.com

- name 用于区别spider。该名字是唯一的。
 - start_urls 包含了Spider在启动时进行爬取的url列表。
 - parse() 是spider的一个方法。调用时,每个初始URL完成下载后生成的response对象将会作为唯一的参数传递给该函数。
 
制作爬虫
scrapy crawl your_app_name

选择器简介
从网页中提取数据。Scrapy使用了一种基于Xpath与CSS表达式机制。
基本方法
- xpath()
 - css() 传入css表达式
 - extract() 序列化该结点并返回list
 - re() 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表
 
保存数据
-o 文件.格式
- json 标准json格式
 - jl 一行一行的格式
 - csv
 - xml
 - ftp 远程文件上传
 
scrapy crawl your_app_name -o   target_name.json
scrapy crawl your_app_name -o ftp://......
Shell 操作
Scrapy内置的 Scrapy shell 可以在命令行操作
开始
scrapy shell "http://www.itaolaity.com"

css选择
response.css('__选择规则___')
返回一个selector的集合。如果想要提取文本可以:extract()

需要注意的是如果我们添加::text到css查询 那我们可以直接取出html代码里的文本否则取出的是完整的标签文本
如果只想要第一个结果extract_first()
应用
目标爬取导航网站
就拿我自己的网站来爬取吧。获取网站的标题、时间、种类

首先对获取的数据进行建模
# items.py
import scrapy
class FtryItem(scrapy.Item):
    title = scrapy.Field()
    time = scrapy.Field()
    type = scrapy.Field()
    pass
#itao.py
import scrapy
from ..items import *
class ItaoSpider(scrapy.Spider):
    name = 'itao'
    allowed_domains = ['www.itaolaity.com']
    start_urls = ['http://www.itaolaity.com/']
    def parse(self, response):
        post_item = response.css('.post-card-container')
        for item in post_item:
            title = item.css('.post-card-title::text').extract_first(),
            time = item.css('.post-card-info span:nth-child(1)::text').extract_first(),
            type = item.css('.post-card-info span:nth-child(2)::text').extract_first(),
            oIt = FtryItem()
            oIt['title'] = title
            oIt['time'] = time
            oIt['type'] = type
            yield  oIt
保存json格式文件
scrapy crawl itao -o main.json
