安装方法:Windows:在终端输入命令:pip install scrapy;mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到Python文件夹。接着输入cd Pythoncode,就能跳转到Python文件夹里的Pythoncode子文件夹。最后输入一行能帮我们创建Scrapy项目的命令:scrapy startproject douban,douban就是Scrapy项目的名字。按下enter键,一个Scrapy项目就创建成功了。

项目目标:爬取豆瓣读书Top250的书名,出版信息和评分

目标url为:https://book.douban.com/top250?start=0
整个scrapy项目的结构,如下图

spiders是放置爬虫的目录。我们在spiders这个文件夹里创建爬虫文件,我们把这个文件命名为top250,大部分代码都需要在这个top250.py文件里编写。在top250.py文件里导入我们需要的模块:import scrapy , bs4
导入scrapy是我们要用创建类的方式写这个爬虫,我们所创建的类将直接继承scrapy中的scrapy.Spider类。这样,有许多好用属性和方法,就能够直接使用。

在Scrapy中,每个爬虫的代码结构基本都如下所示:

class DoubanSpider(scrapy.Spider): #定义一个爬虫类DoubanSpider,DoubanSpider类继承自scrapy.Spider类。name = 'douban'  #定义爬虫的名字,这个名字是爬虫的唯一标识。allowed_domains = ['book.douban.com']#定义允许爬虫爬取的网址域名(不需要加https://)。如果网址的域名不在这个列表里,就会被过滤掉。allowed_domains就限制了,我们这种关联爬取的URL,一定在book.douban.com这个域名之下,不会跳转到某个奇怪的广告页面。start_urls = ['https://book.douban.com/top250?start=0']#定义起始网址,就是爬虫从哪个网址开始抓取def parse(self, response):#parse是Scrapy里默认处理response的一个方法,中文是解析。print(response.text)
#这里我们并不需要写类似requests.get()的语句,scrapy框架会为我们代劳做这件事,写好你的请求,接下来你就可以直接写对响应如何做处理

每一次,当数据完成记录,它会离开spiders,来到Scrapy Engine(引擎),引擎将它送入Item Pipeline(数据管道)处理。定义这个类的py文件,正是items.py。
如果要爬取豆瓣读书的书名、出版信息和评分,示例:

在items.py里如何定义数据:

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

scrapy.Field()这行代码实现的是,让数据能以类似字典的形式记录,它输出的结果非常像字典,但它却并不是dict,它的数据类型是我们定义的DoubanItem,属于自定义的Python字典.我们利用类似上述代码的样式,去重新写top250.py

import scrapy
import bs4
from ..items import DoubanItem
# 需要引用DoubanItem,它在items里面。因为是items在top250.py的上一级目录,所以要用..items,这是一个固定用法。class DoubanSpider(scrapy.Spider):
#定义一个爬虫类DoubanSpider。name = 'douban'#定义爬虫的名字为douban。allowed_domains = ['book.douban.com']#定义爬虫爬取网址的域名。start_urls = []#定义起始网址。for x in range(3):url = 'https://book.douban.com/top250?start=' + str(x * 25)start_urls.append(url)#把豆瓣Top250图书的前3页网址添加进start_urls。def parse(self, response):#parse是默认处理response的方法。bs = bs4.BeautifulSoup(response.text,'html.parser')#用BeautifulSoup解析response。datas = bs.find_all('tr',class_="item")#用find_all提取<tr class="item">元素,这个元素里含有书籍信息。for data in  datas:#遍历data。item = DoubanItem()#实例化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属性里。print(item['title'])#打印书名。yield item#yield item是把获得的item传递给引擎。

当我们每一次,要记录数据的时候,比如前面在每一个最小循环里,都要记录“书名”,“出版信息”,“评分”。我们会实例化一个item对象,利用这个对象来记录数据。
每一次,当数据完成记录,它会离开spiders,来到Scrapy Engine(引擎),引擎将它送入Item Pipeline(数据管道)处理。这里,要用到yield语句。
yield语句它有点类似return,不过它和return不同的点在于,它不会结束函数,且能多次返回信息。

就如同上图所示:爬虫(Spiders)会把豆瓣的10个网址封装成requests对象,引擎会从爬虫(Spiders)里提取出requests对象,再交给调度器(Scheduler),让调度器把这些requests对象排序处理。然后引擎再把经过调度器处理的requests对象发给下载器(Downloader),下载器会立马按照引擎的命令爬取,并把response返回给引擎。
紧接着引擎就会把response发回给爬虫(Spiders),这时爬虫会启动默认的处理response的parse方法,解析和提取出书籍信息的数据,使用item做记录,返回给引擎。引擎将它送入Item Pipeline(数据管道)处理。

代码实操——设置

点击settings.py文件,把USER _AGENT的注释取消(删除#),然后替换掉user-agent的内容,就是修改了请求头。
因为Scrapy是遵守robots协议的,如果是robots协议禁止爬取的内容,Scrapy也会默认不去爬取,所以修改Scrapy中的默认设置。把ROBOTSTXT_OBEY=True改成ROBOTSTXT_OBEY=False,就是把遵守robots协议换成无需遵从robots协议,这样Scrapy就能不受限制地运行。

想要运行Scrapy有两种方法,一种是在本地电脑的终端跳转到scrapy项目的文件夹

(跳转方法:cd+文件夹的路径名如:
cd D:\python\Pythoncode\douban\douban)
然后输入命令行:scrapy crawl douban(douban 就是我们爬虫的名字)。)

另一种运行方式需要我们在最外层的大文件夹里新建一个main.py文件(与scrapy.cfg同级)。

然后在这个main.py文件里,输入以下代码,点击运行,Scrapy的程序就会启动。

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

第1行代码:在Scrapy中有一个可以控制终端命令的模块cmdline。导入了这个模块,我们就能操控终端。
第2行代码:在cmdline模块中,有一个execute方法能执行终端的命令行,不过这个方法需要传入列表的参数。我们想输入运行Scrapy的代码scrapy crawl douban,就需要写成[‘scrapy’,‘crawl’,‘douban’]这样。
在实际项目实战中,我们应该先定义数据,再写爬虫。所以,流程图应如下:

最后,存储数据需要修改pipelines.py文件

本博文为学习笔记,由博主自风变编程学习整理而来。

爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分相关推荐

  1. 爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息

    爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息 一.前言 二.项目目标 三.项目的环境配置 四.项目实现 1. 创建QSBK项目 2. 实现Spider 1. 实现一页网页上 ...

  2. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  3. 杀鸡用用牛刀 scrapy框架爬取豆瓣电影top250信息

    文章目录 一.分析网页 二.scrapy爬虫 三.处理数据 原文链接:https://yetingyun.blog.csdn.net/article/details/108282786 创作不易,未经 ...

  4. python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码

    今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...

  5. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云

    基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...

  6. 使用python的scrapy框架简单的爬取豆瓣读书top250

    使用python的scrapy框架简单的爬取豆瓣读书top250 一.配置scrapy环境 1. 配置相应模块 如果没有配置过scrapy环境的一般需要安装lxml.PyOpenssl.Twisted ...

  7. python爬虫爬取豆瓣读书Top250

    python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...

  8. [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书

    这里我们要爬起豆瓣读书Top250,并保存每本书的书名,信息,简要介绍和作者信息.  这里,仍然分为三步:  1.url分析  2.数据分析  3.爬取数据 1.url分析 豆瓣读书Top250的ur ...

  9. 用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型

    文章目录 前言 一.Scrapy爬虫爬取豆瓣电影 1. Scrapy框架介绍 (1) Scrapy框架构造: (2) 数据流 (3) 项目结构 2. 创建爬虫爬取豆瓣 (1)创建项目 (2) 创建It ...

最新文章

  1. 《汽车驾驶自动化分级》国家标准发布
  2. 世界名画 | 陌上花开,可缓缓归矣
  3. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
  4. 读书笔记_C#入门经典(第5版)第六章_函数
  5. [大数据]PySpark原理与基本操作
  6. windows下使用kafka
  7. python socket模块 和pyqt_使用PyQt和Socket进行聊天编程[标准库]
  8. UWP 实现分享功能
  9. [转]使用Python MrJob的MapReduce实现电影推荐系统
  10. 【渝粤教育】电大中专建筑力学 (3)作业 题库
  11. (1) IFC格式简介 (Industry Foundation Class)
  12. mysql查看表空间占用情况
  13. 自定义 Excel 自动填充快捷键
  14. 这个冬季,你抑郁吗?
  15. php 生成excel表格,PHP 生成Excel表格两种方法
  16. Qt 快速利用qt designer Layout绘制GUI界面
  17. 物联网通信技术|课堂笔记|week8|网络安全学习|加密逻辑|加密算法
  18. SCAU 2022 Java综合性实验
  19. 美国大学本科计算机本科排名2015,美国大学计算机本科最新排名
  20. 如何免费下载Tuxera NTFS for Mac序列号

热门文章

  1. Hive UDF GDF UDTF编写与实现
  2. 【ROS2要素】xml、GDF、URDF的关系
  3. 企业如何召开发布会,发布会如何邀请媒体
  4. OpenJudge1.5.24正常血压
  5. 20以内分数化小数表_初等数学33-百分数
  6. android java ibinder_Java IBinder.isBinderAlive方法代码示例
  7. 中小企业一年中破产率_有此问题的企业中有60%在6个月内破产
  8. [论文研读]Compiler Optimization of Accelerator Data Transfers
  9. 从长远看以后会工作方向以及学习内容
  10. geoserver发布shape地图步骤