一、Scrapy原理

工作原理:通过引擎统领其他成员协同工作。

在使用Scrapy的时候,不需要关心爬虫的每个流程,scrapy中的网络请求都是默认异步模式,请求和返回都会由引擎自动分配处理。如果某个请求出现异常,框架会做异常处理,跳过这个异常的请求,继续去执行后面的程序。

Scheduler(调度器)主要负责处理引擎发送过来的requests对象,把请求的url以有序的方式排列成队,等待引擎提取(类似gevent库的queue模块)。(Scrapy已实现)

Downloader(下载器)负责处理引擎发送过来的requests,进行网页爬取,并将返回的response交给引擎,对应爬虫流程中的【获取数据】。(Scrapy已实现)

Spiders(爬虫)负责创建requests对象和接受引擎发送过来的response,从中解析并提取出有用的数据,对应爬虫流程中【解析数据】和【提取数据】。

Item Pipeline(数据管道)负责存储和处理Spiders提取到的有用数据,对应爬虫流程中的【存储数据】。

二、Scrapy的用法

项目目标:爬取豆瓣Top250图书。

实现步骤:明确目标、分析过程、代码实现。

代码实现——创建项目

前提:安装Scrapy : pip install scrapy -i https://pypi.douban.com/simple

1、打开终端(win+R,输入cmd),进入想要保存项目的目录下(例如我保存项目的文件夹位置:D:\Code_WorkPlace\Python_WorkPlace\scrapy_project;先在命令行输入【d:】跳转到d盘,再输入【cd D:\Code_WorkPlace\Python_WorkPlace\scrapy_project】进入文件夹

2、创建Scrapy项目:在命令行输入【scrapy startproject douban】,douban是Scrapy项目的名字,按下enter键项目创建完成。

也可以直接在pycharm的terminal中直接输入[scrapy startproject douban]来创建项目,进入刚创建的项目目录【cd douban】,输入命令【scrapy genspider book_douban “book.douban.com”】来生成爬虫

setting.py是Scrapy里的各种设置,items.py用来定义数据,pipeline.py用来处理数据。spiders是放置爬虫的目录,可以在里面创建爬虫文件。

3、代码实现

在scrapy中items.py专门用来定义用于记录数据的类。在爬取豆瓣数据时,都要记录书名、出版信息、评分等,这时会实例化一个对象,利用这个对象来记录数据。

import scrapy
#导入scrapy
class BookDoubanItem(scrapy.Item):
#定义一个类BookDoubanItem,它继承自scrapy.Itemtitle = scrapy.Field()#定义书名的数据属性publish = scrapy.Field()#定义出版信息的数据属性score = scrapy.Field()#定义评分的数据属性

在spiders文件中创建Book_douban_Top250.py文件,在Scrapy中每个爬虫的代码结构基本如下:

import scrapy
import bs4
from ..items import BookDoubanItem#定义一个爬虫类,继承自scrapy.Spider类,方便直接使用Spider中的属性和方法
class DoubanSpider(scrapy.Spider):name = 'book_douban' #定义爬虫的名字,这个名字是爬虫的唯一标识,后续启动爬虫时会用上allowed_domains = ['book.douban.com'] #定义允许爬虫爬取的网址域名(不需要加https://),如果网址的域名不在列表中会被过滤掉start_urls = ['https://book.douban.com/top250?start=0'] #定义起始网址,就是爬虫从哪个网址开始抓取,allowd_domains的设定对start_urls里的网址不会有影响#parse是Scrapy中默认处理response的方法def parse(self, response):bs = bs4.BeautifulSoup(response.text, 'html.parser')# 用BeautifulSoup解析responsedatas = bs.find_all('tr', class_="item")# 用find_all提取<tr class="item">元素,这个元素里含有书籍信息for data in datas:# 遍历dataitem = BookDoubanItem()# 实例化DoubanItem这个类item['title'] = data.find_all('a')[1]['title']# 提取出书名,并把这个数据放回DoubanItem类的title属性里item['publish'] = data.find('p', class_='pl').text# 提取出出版信息,并把这个数据放回DoubanItem类的publish里item['score'] = data.find('span', class_='rating_nums').text# 提取出评分,并把这个数据放回DoubanItem类的score属性里。yield item# yield item是把获得的item传递给引擎,类似return,但yield不会结束函数,能够多次返回信息

修改Scrapy的设置:修改settings.py文件

①修改请求头:

USER_AGENT = ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36’

②把ROBOTSTXT_OBEY=True改成ROBOTSTXT_OBEY=False

Scrapy是遵守robots协议的,如果是robots协议禁止爬取的内容,Scrapy会默认不去爬取,改成False就是设置为无需遵从robots协议,保证Scrapy能不受限制地运行。

③对DOWNLOAD_DELAY = 3这行取消注释,同时对DOWNLOAD_DELAY这个参数的值进行修改。DOWNLOAD_DELAY的意思是下载延迟,作用是控制爬虫的速度,3秒对于这个项目来说太慢了,可以把下载延迟的时间改成0.5秒。

DOWNLOAD_DELAY = 0.5

4、项目运行

方法一:从终端进入Scrapy项目的文件夹,在命令行中输入【scrapy crawl book_douban】,book_douban是之前定义的爬虫的名字

方法二:在Scrapy项目最外层的大文件夹中新建main.py文件(与scrapy.cfg同级),输入以下内容,点击运行即可。

from scrapy import cmdline
#导入cmdline模块,可以实现控制终端命令行cmdline.execute(['scrapy','crawl','book_douban'])
#用execute()方法,输入运行scrapy的命令

Scrapy的使用步骤

1、创建Scrapy项目

2、定义item

3、编写spiders

4、修改settings.py

5、运行Scrapy

存储文件

1、用csv模块存储

在settings.py文件中添加以下代码:

FEED_URL='%(name)s.csv'    #导出文件路径,'%(name)s.csv'指把csv文件方法settings.py文件同级文件夹内
FEED_FORMAT='CSV'   #导出数据格式
FEED_EXPORT_ENCODING='ansi'   #导出文件编码,ansi是一种在windows上的编码格式,也可以换成utf-8

2、用Excel文件存储

在settings.py文件中启用ITEM_PIPELINES(去掉注释即可):

ITEM_PIPELINES = {'class14.pipelines.Class14Pipeline': 300,
}

编辑pipeline.py文件:

import openpyxlclass Class14Pipeline(object):# 定义一个Class14Pipeline类,负责处理itemdef __init__(self):# 初始化函数 当类实例化时这个方法会自启动self.wb = openpyxl.Workbook()# 创建工作薄self.ws = self.wb.active# 定位活动表,书名、出版信息、评分self.ws.append(['书名', '出版信息', '评分'])# 用append函数往表格添加表头def process_item(self, item, spider):# process_item是默认的处理item的方法,就像parse是默认处理response的方法line = [item['title'], item['publish'], item['score']]# 把书名、出版信息、评分都写成列表的形式,赋值给lineself.ws.append(line)# 用append函数把书名、出版信息、评分的数据都添加进表格return item# 将item丢回给引擎,如果后面还有这个item需要经过的itempipeline,引擎会自己调度def close_spider(self, spider):# close_spider是当爬虫结束运行时,这个方法就会执行self.wb.save('BookInfo.xlsx')# 保存文件self.wb.close()# 关闭文件

Scrapy:爬取豆瓣图书相关推荐

  1. Scrapy爬取豆瓣图书详情存入CSV并导入MySQL

    目录 前言 一.新建爬虫工程 二.修改settings.py文件 三.编写items.py 四.编写pipelines.py 五.编写book.py 六.存储到MySQL 七.爬取结果 八.后言 前言 ...

  2. scrapy mysql 豆瓣_利用Scrapy爬取豆瓣图书并保存至Mysql数据库

    Scrapy是一个纯Python语言写的爬虫框架,本次用它来爬取豆瓣图书的数据. 准备工作 没有安装Scrapy的同学需要安装一下,有两种方式安装: 安装了Anaconda的同学直接在命令行输入con ...

  3. Scrapy爬取豆瓣图书Top250数据,在PowerBI中可视化分析

    文章目录 项目说明 Scrapy框架 网页分析 爬虫代码 items spiders pipelines main 爬取结果 PowerBI分析 分析结果 项目说明 近期在学习Python爬虫,看了很 ...

  4. requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250

    上一篇我们学习了BeautifulSoup的基本用法,本节我们使用它来爬取豆瓣图书Top250. 一.网页分析 我们爬取的网页的url是https://book.douban.com/top250?i ...

  5. Python3爬取豆瓣图书Top250并写入txt文件当中

    首先简单介绍一下过程 1.解析url 2.获得html文件 3.解析数据 4.写入txt文本(按页写入) 5.上传代码 转载前可以备注一下ytouch的名字 '''爬取豆瓣图书前250名''' #au ...

  6. python爬虫爬取豆瓣图书

    爬取豆瓣图书top250的第一页 我最终爬取的是图书的书名,链接 先要做个说明,如果你是编程高手的话,这边文章你就不用看了,如果你是个python爬虫小白的话,可以看看这篇原创 我将用到的软件是pyc ...

  7. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  8. python爬取豆瓣图书(详细步骤讲解)

    题目: 老师安排我们爬取豆瓣图书,恰好想学,所以把爬取的过程按照顺序写下来,主要是留个痕迹.在文中我会把爬虫所需的所有代码以图片形式一一讲解,图片里的代码就是全部的爬虫代码!!!如果你懒得自己敲的话, ...

  9. 爬取豆瓣图书排行榜前十并使用图表的形式展示

    爬取豆瓣图书 最近在学习爬虫的基础使用,发现最好爬的网站就是豆瓣了,随随便便都是可以爬到数据. 下面就是使用Python中间的requests模块实现豆瓣图书排行榜的爬取: import reques ...

  10. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

最新文章

  1. Task04:青少年软件编程(Scratch)等级考试模拟卷(一级)
  2. Node.js process 模块常用属性和方法
  3. 深度学习 点积的概念
  4. PHP 在作为中间件时print无返回值问题
  5. vim使用—实现程序的自动补齐(C语言)
  6. fedora下软件安装
  7. 运算符重载——拷贝构造函数与赋值运算符的区别、如何实现赋值运算符的深拷贝
  8. python复杂网络库networkx:算法
  9. dubbo整合springmvc 使用 学习二(spring+dubbo+zookeeper单机服务)
  10. 聊聊我怎么系统学习Linux技能并快速提高的
  11. mcafee peo5.3安装配置
  12. Android百度地图修改定位时间间隔
  13. c# cad二次开发图表绘制
  14. 万字深度报告丨数据中心投资价值全解析
  15. 连续自然数之和 C++
  16. 把C盘的用户Users文件移动到D盘最简单的方法【转】
  17. 软件工程具体有哪些方向呢
  18. Android-APK
  19. 华科世界第六,北邮碾压伯克利:USNews世界大学CS榜发布
  20. 报错:FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disab

热门文章

  1. 汽车营销与保险【1】
  2. 初级Java程序员如何快速提升自己的能力?
  3. 计算机电子智能化贰级,电子与智能化工程专业承包资质分为一级、二级。
  4. 国内外五款免费的协作类管理软件推荐
  5. C#中的session用法
  6. 卡巴斯基激活码 卡巴斯基2010激活码下载
  7. 中国数据库告别卡脖子:阿里再刷新全球纪录,代码100%自研
  8. 第九届蓝桥杯单片机省赛试题
  9. c语言斐波那契数列_Day 7:斐波那契数列
  10. STM32驱动SG90舵机