Scripy学习(一)

一."5+2"结构

SPIDERS(入口,需要用户编写):1.提供最初始的访问链接 2.解析Downloader返回的响应,返回想要的内容和额外的爬取请求

Spider Midderware:

ITEM PIPELINES:(出口,用户编写):清理,检验和查看,存储数据

DOWNLOADER:(已有实现):下载网页

SCHEDULER:(已有实现):对所有请求进行调度处理(相当于队列,有序提供url)

ENGINE(已有实现):控制模块之间的数据流,根据条件触发时间

Downloader Middleware:(用户可编写)实施ENGINE.Scheduler和Download之前进行用户可配置的控制

流程:

SPIDERS将url请求列表通过中间件传递给SCHEDURER

SCHEDULER处理后通过ENGINE传递给DOWNLOAD

DOWNLOAD下载相关网页后通过ENGINE把数据传递给SPIDERS

SPIDERS解析数据,将想要的数据分为两部分:(ITEMS/REQUESTS)

ITEM PIPELINES接收数据并进行数据清理

二.缺点

和request库相同,都没有提供处理js,提交表单,应对验证码等功能的实现

三.常用命令

startproject:创建一个新工程

genspider:创建一个爬虫

setting:获得爬虫的所有信息

crawer:运行一个爬虫

list:列出工程中所有爬虫

shell:启动url调试命令行

四.第一个实例

步骤:

1.建立爬虫工程

scrapy startproject  scrapy_demo

scapy.cfg:部署Scrapy爬虫的配置文件

scrapy_demo:用户自定义python代码

2.创建一个爬虫

scrapy genspider demo scrapy_demo     会在Spider文件夹下创建一个demo.py文件,代码如下

# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    #只能在该域中爬去网页
    allowed_domains = ['scrapy_demo']
    start_urls = ['http://scrapy_demo/']
    #用于处理响应,解析内容形成字典,发现新的url爬虫请求
    def parse(self, response):
        pass

3.配置产生的spider爬虫(修改demo文件)

class DemoSpider(scrapy.Spider):
    name = 'demo'
    #只能在该域中爬去网页
    # allowed_domains = ['scrapy_demo']
    start_urls = ['https://python123.io/ws/demo.html']
    #用于处理响应,解析内容形成字典,发现新的url爬虫请求
    def parse(self, response):
        #将爬取的url名的后半部分作为文件名
        fname=response.url.split('/')[-1]
        with open(fname,'wb') as wf:
            wf.write(response.body)
        self.log('保存%s文件成功'%fname)
        pass

4.运行爬虫,获取网页

scrapy crawl demo

可以看到在当前目录下生成了demo.html文件

原文地址:https://www.cnblogs.com/hhy-love-python/p/scrapy.html