Scrapy 爬虫框架

5+2  的结构

Scrapy爬虫框架解析
Engine模块(不需要用户修改):控制所有模块之间的数据流;根据条件触发事件
Downloader模块(不需要用户修改):根据请求下载网页
Scheduler模块(不需要用户修改):对所有爬取请求进行调度管理
Downloader Middleware中间键
目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应用户可以编写配置代码
Spider模块(需要用户编写配置代码)
解析Downloader返回的响应(Response)
产生爬取项(scraped item)
产生额外的爬取请求(Request)
Item Pipelines模块(需要用户编写配置代码)
以流水线方式处理Spider产生的爬取项
由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库 
 
Spider Middleware中间键
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项
用户可以编写配置代码
 
requests库和Scrapy爬虫的比较
相同点
两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没用处理js、提交表单、应对验证码等功能(可扩展)
不同点
选用哪个技术路线开发爬虫
 
Scrapy爬虫的常用命令 
Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行
为什么Scrapy采用命令行创建和运行爬虫
命令行(不是图形界面)更容易自动化,适合脚本控制
本质上,Scrapy是给程序员用的,功能(而不是界面)更重要 
 一个实例
演示HTML页面地址:http://python123.io/ws/demo.html
文件名称:demo.html
产生步骤
步骤1:建立一个Scrapy爬虫工程
scrapy startproject python123demo
生成的工程目录
 
步骤2:在工程中产生一个Scrapy爬虫
cd python123demo ­­> scrapy genspider demo python123.io
demo.py文件
# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):必须继承于scrapy.Spider
    name = 'demo'
    allowed_domains = ['python123.io']#只能爬取该域名一下的内容
    start_urls = ['http://python123.io/']

    def parse(self, response):
        pass
 
# parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求 
 
步骤3:配置产生的spider爬虫 
 
# -*- coding: utf-8 -*-



import scrapy
class DemoSpider(scrapy.Spider):
    name ='demo'
    allowed_domains = ["python123.io"]
    start_urls = ['https://python123.io/ws/demo.html']
    def parse(self,response):
        fname = response.url.split('/')[-1]
        with open(fname,'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)
步骤4:运行爬虫,获取网页
scrapy crawl demo 
原文地址:https://www.cnblogs.com/tingtin/p/13024870.html