爬虫 --- 06. scrapy框架初始

一.基本概念

- scrapy:爬虫框架。      异步爬取,高性能的数据解析+持久化存储操作,      集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。
- 框架:集成了很多功能且具有很强通用性的一个项目模板
- 如何学习框架:
    - 学习框架的功能模块的具体使用。

二. 环境的安装

 windows系统:    

     a. pip3 install wheel

      b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

      c. 进入下载目录,执行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl

      d. pip3 install pywin32

      e. pip3 install scrapy

  

  Linux系统:


      pip3 install scrapy

 

三. 使用流程

    - ① 创建一个工程:scrapy startproject firstBlood
    - ② cd firstBlood
    - ③ 创建爬虫文件:scrapy genspider first www.xxx.com
    - ④ 执行:scrapy crawl first
    scrapy crawl 爬虫名称 :该种执行形式会显示执行的日志信息
    scrapy crawl 爬虫名称 --nolog:该种执行形式不会显示执行的日志信息
项目结构:

project_name/
   scrapy.cfg:
   project_name/
       __init__.py
       items.py
       pipelines.py
       settings.py
       spiders/
           __init__.py

scrapy.cfg   项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py     设置数据存储模板,用于结构化数据,如:Django的Model
pipelines    数据持久化处理
settings.py  配置文件,如:递归的层数、并发数,延迟下载等
spiders      爬虫目录,如:创建文件,编写爬虫解析规则

四.基本结构:

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

class QiubaiSpider(scrapy.Spider):
    name = ‘qiubai‘ #应用名称
    #允许爬取的域名(如果遇到非该域名的url则爬取不到数据)
    allowed_domains = [‘https://www.qiushibaike.com/‘]
    #起始爬取的url
    start_urls = [‘https://www.qiushibaike.com/‘]

     #访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll
     def parse(self, response):
        print(response.text) #获取字符串类型的响应内容
        print(response.body)#获取字节类型的相应内容

爬虫文件

示例:

#嗅事百科 作者和内容

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

class FirstSpider(scrapy.Spider):
    name = ‘first‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://www.qiushibaike.com/text/‘]

    def parse(self, response):

        div_list = response.xpath(‘//div[@id="content-left"]/div‘)
        for div in div_list:
            autor = div.xpath(‘./div[1]/a[2]/h2/text()‘).extract_first()
            content = div.xpath(‘./a/div/span//text()‘).extract()
            print(autor,content)

五.持久化存储

- 持久化存储:
    - 基于终端指令:scrapy crawl qiubai -o filePath.csv
        - 好处:便捷
        - 弊端:局限性强(只可以将数据写入本地文件,文件后缀是由具体要求)
    - 基于管道:
        - 基于持久化存储的所有操作都必须写入到管道文件的管道类中

  1.基于终端指令存储

必须以结构  [{},{}]  的形式

执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
    scrapy crawl 爬虫名称 -o xxx.json
    scrapy crawl 爬虫名称 -o xxx.xml
    scrapy crawl 爬虫名称 -o xxx.csv
#示例:

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

class FirstSpider(scrapy.Spider):
    name = ‘first‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://www.qiushibaike.com/text/‘]

    def parse(self, response):
        all_data = []
        div_list = response.xpath(‘//div[@id="content-left"]/div‘)
        for div in div_list:
            autor = div.xpath(‘./div[1]/a[2]/h2/text()‘).extract_first()
            content = div.xpath(‘./a/div/span//text()‘).extract()
            # print(autor,content)
            dic = {
                ‘author‘:autor,
                ‘content‘:content,
                ‘---‘:"\n"+"----------------------------------------"
            }
            all_data.append(dic)

        return all_data

  2.基于管道的持久化存储

#在爬虫文件中

# -*- coding: utf-8 -*-
import scrapy
from qiubaiPro.items import QiubaiproItem

class QiubaiSpider(scrapy.Spider):
    name = ‘qiubai‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://www.qiushibaike.com/text/‘]

    def parse(self, response):
        div_list = response.xpath(‘//div[@id="content-left"]/div‘)
        all_data = []
        for div in div_list:
            # author = div.xpath(‘./div[1]/a[2]/h2/text()‘)[0].extract()
            author = div.xpath(‘./div[1]/a[2]/h2/text()‘).extract_first()

            content = div.xpath(‘./a/div/span//text()‘).extract()
            content = ‘‘.join(content)
            # print(content)
            #实例化一个item类型的对象
            item = QiubaiproItem()
            #使用中括号的形式访问item对象中的属性
            item[‘author‘] = author
            item[‘content‘] = content

            #将item提交给管道
            yield item
#items.py文件中

import scrapy

class QiubaiproItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #scrapy.Field()万能的数据类型
    author = scrapy.Field()
    content = scrapy.Field()
#pipelines.py(管道文件)中

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

#一个类表示的是将解析/爬取到的数据存储到一个平台
import pymysql
from redis import Redis

#存在本地文件
class QiubaiproPipeline(object):
    fp = None
    def open_spider(self,spider):
        print(‘开始爬虫......‘)
        self.fp = open(‘./qiubai.txt‘,‘w‘,encoding=‘utf-8‘)
    #可以将item类型的对象中存储的数据进行持久化存储
    def process_item(self, item, spider):
        author = item[‘author‘]
        print(author, type(author))
        content = item[‘content‘]
        self.fp.write(author+ ":"+content)

        return item #返回给了下一个即将被执行的管道类
    def close_spider(self,spider):
        print(‘结束爬虫!!!‘)
        self.fp.close()
# 存在mysql数据库中
class MysqlPipeLine(object):
    conn = None
    cursor = None
    def open_spider(self,spider):
        self.conn = pymysql.Connect(host=‘127.0.0.1‘,port=3306,user=‘root‘,password=‘‘,db=‘qiubai‘,charset=‘utf8‘)
        print(self.conn)

    def process_item(self, item, spider):
        self.cursor = self.conn.cursor()
        try:
            self.cursor.execute(‘insert into qiubai values("%s","%s")‘%(item[‘author‘],item[‘content‘]))
            self.conn.commit()
        except Exception as e:
            print(e)
            self.conn.rollback()
        return item
    def close_spider(self,spider):
        self.cursor.close()
        self.conn.close()

#存在redis数据库
class RedisPipeLine(object):
    conn = None
    def open_spider(self,spider):
        self.conn = Redis(host=‘127.0.0.1‘,port=6379)
        print(self.conn)
    def process_item(self,item,spider):
        dic = {
            ‘author‘:item[‘author‘],
            ‘content‘:item[‘content‘]
        }
        self.conn.lpush(‘qiubai‘,dic)

setting配置文件中

原文地址:https://www.cnblogs.com/sc-1067178406/p/10956908.html

时间: 2024-08-01 04:01:25

爬虫 --- 06. scrapy框架初始的相关文章

Python网络爬虫之Scrapy框架(CrawlSpider)

目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). CrawlSpider使

网络爬虫之scrapy框架详解,scrapy框架设置代理

twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是什么以及和requests的区别: request是一个python实现的可以伪造浏览器发送Http请求的模块,它封装了socket发送请求 twisted是基于时间循环的异步非阻塞的网络框架,它也封装了socket发送请求,但是他可以单线程的完成并发请求. twisted的特点是: 非阻塞:不等待

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider)

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider) 引入 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). 今日概要 CrawlSpider简介 CrawlSpider使用 基于CrawlSpider爬虫文件的创建 链接提取器 规则解析器 今日详

Requests爬虫和scrapy框架多线程爬虫

1.基于Requests和BeautifulSoup的单线程爬虫 1.1 BeautifulSoup用法总结 1. find,获取匹配的第一个标签 tag = soup.find('a') print(tag) tag = soup.find(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie') tag = soup.find(name='a', class_='sister', recursive=True, te

python爬虫之scrapy框架

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy 使用了 Twisted异步网络库来处理网络通讯.整体架构大致如下 Scrapy主要包括了以下组件: 引擎

Python爬虫进阶(Scrapy框架爬虫)

准备工作:           配置环境问题什么的我昨天已经写了,那么今天直接安装三个库                        首先第一步:                            (我们要用到scrapy框架,在python里调用windows 命令,使用mongodb存储爬到的数据 )                                  进入DOS python/Script>路径下  输入命令: python/Script> pip install p

python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍

scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.(引用自:百度百科) scrapy官方网站:https://scrapy.org/ scrapy官方文档:https://doc.scrapy.org/en/latest/ scrapy框架安装 首先我们安装scrapy,使用如下命令 pip install scrapy 此时很多人应该都会遇到如

爬虫之scrapy框架

1.scrapy框架介绍 Scrapy是用纯Python实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架 Scrapy 特色是使用了 Twisted异步网络框架来处理网络通讯,加快了下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求 1.1 scrapy框架架构图 Scrapy Engine(引擎): 负责Spider.ItemPipeline.Downloader.Scheduler中间的通讯,信号.数据传递等. Scheduler(调度器): 它负责

18、python网路爬虫之Scrapy框架中的CrawlSpider详解

CrawlSpider的引入: 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效) CrawlSpider的简介: CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能.其中最显著的功能就是"