接下来以爬取quote.toscrape.com为例完成一遍Scrapy的抓取流程。

首先创建一个Scrapy项目。打开命令行,输入以下命令:

scrapy startproject projectname

即可在当前位置创建一个Scrapy项目。我们创建一个名为tutorial的项目:

scrapy startproject tutorial

可以看到当前位置出现了一个名为tutorial的文件夹,这代表着项目已经创建完毕。

接下来我们需要创建一个Spider。Spider负责从网页中抓取内容并返回解析结果。创建Spider需继承scrapy.Spider类在命令行中输入:

cd tutorial

scrapy genspider quotes quotes.toscrape.com

以上命令建立了一个名为QuotesSpider的Spider,可以在项目文件夹找到。

接下来我们需要定义Item。Item是保存数据的容器。创建Item需要继承scrapy.Item类,并且定义类型为scrapy.Field的字段。打开浏览器开发者工具,我们观察到我们将爬取的内容有text、author、tags。定义Item,将items.py修改如下:

import scrapy

class QuoteItem(scrapy.Item):
text = scrapy.Field()
author = scrapy.Field()
tags = scrapy.Field()

查看网页源码,每页有多个class为quote的块,块中包含我们想要爬取的内容,那么我们先找出所有的quote,然后提取每个quote的内容。提取完毕后,我们需要将下一页的url提交给Engine。这一部分工作由Spider来完成。修改quotes.py如下:

# -*- coding: utf-8 -*-
import scrapy
from tutorial.items import QuoteItem class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/'] def parse(self, response):
quotes = response.css('.quote')
for quote in quotes:
item = QuoteItem()
item['text'] = quote.css('.text::text').extract_first()
item['author'] = quote.css('.author::text').extract_first()
item['tags'] = quote.css('.tags .tag::text').extract()
yield item next = response.css('.paper .next a::attr(href)').extract_first()
url = response.urljoin(next)
yield scrapy.Request(url=url,callback=self.parse)

这里我们使用了css选择器进行提取,当然也可以用Xpath进行提取。extract_first()方法返回第一个匹配到的元素,extract()则返回匹配到的所有元素的列表。

代码中我们用了QuoteItem,这是一个Item对象,我们可以将它理解为一个字典,用来存放spider解析后的数据。

通过以上修改,我们已经完成了一个网站爬虫的所有工作。现在让我们来运行它!在命令行中输入:

scrapy crawl quotes

即可看到爬取的结果。

Scrapy框架学习(二)Scrapy入门的更多相关文章

  1. 自己的Scrapy框架学习之路

    开始自己的Scrapy 框架学习之路. 一.Scrapy安装介绍 参考网上资料,先进行安装 使用pip来安装Scrapy 在开始菜单打开cmd命令行窗口执行如下命令即可 pip install Scr ...

  2. scrapy框架(二)

    scrapy框架(二) 一.scrapy 选择器 概述: Scrapy提供基于lxml库的解析机制,它们被称为选择器. 因为,它们“选择”由XPath或CSS表达式指定的HTML文档的某部分. Sca ...

  3. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  4. scrapy框架学习之路

    一.基础学习 - scrapy框架 介绍:大而全的爬虫组件. 安装: - Win: 下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip3 ...

  5. scrapy框架学习

    一.初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网 ...

  6. Scrapy 框架 (学习笔记-1)

    环境: 1.windows 10 2.Python 3.7 3.Scrapy 1.7.3 4.mysql 5.5.53 一.Scrapy 安装 1. Scrapy:是一套基于Twisted的一部处理框 ...

  7. Scrapy框架学习 - 使用内置的ImagesPipeline下载图片

    需求分析需求:爬取斗鱼主播图片,并下载到本地 思路: 使用Fiddler抓包工具,抓取斗鱼手机APP中的接口使用Scrapy框架的ImagesPipeline实现图片下载ImagesPipeline实 ...

  8. Scrapy框架学习笔记

    1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...

  9. Python3爬虫(十八) Scrapy框架(二)

    对Scrapy框架(一)的补充 Infi-chu: http://www.cnblogs.com/Infi-chu/ Scrapy优点:    提供了内置的 HTTP 缓存 ,以加速本地开发 .   ...

  10. Scrapy框架学习(一)Scrapy框架介绍

    Scrapy框架的架构图如上. Scrapy中的数据流由引擎控制,数据流的过程如下: 1.Engine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取得URL. 2.En ...

随机推荐

  1. 【Selenium专题】FAQ_浏览器_ChromeDriver版本导致报错

    报错信息 Started ChromeDriver port=31984 version=23.0.1240.0 log=C:\workspace\test\chromedriver.log [063 ...

  2. Eclipse中mvn install 报错error in opening zip file

    报错信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (de ...

  3. OCP题库变更,052新加的考试题及答案整理-22题

    22.You are planning a software installation for both Oracle Database 11g Release 1 and Release 2. Yo ...

  4. Python strip()函数用法

    Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数: strip 同时去掉左右两边的空格lstrip 去掉左边的空格rstrip 去掉右边的空格 具体示 ...

  5. H5新手教程,小白来看看。

    H5教程(一) 相信点进来看这篇文章的应该都是刚刚接触H5的新手,那么你真的是找到了一篇合适的文章. 1.学习前准备 既然想学习好H5,只是这样看是不够的,还需要动手练习,以及及时复习,所以我推荐几款 ...

  6. MPMoviePlayerViewController不能播放本地mp4的解决办法.

    之前一直用MPMoviePlayerViewController进行网络播放,最近下载文件然后本地播放,发现怎么播放都是黑屏.后来发现MPMoviePlayerViewController的本地URL ...

  7. JavaScript DOM编程艺术 笔记(二)语句操作

    操作 var total = (1+4)*5; year = year +1; year++; var message = "i am" + "girl"; 是 ...

  8. JavaWeb学习笔记(二十二)—— 过滤器filter

    一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...

  9. 世界最大BT服务器本周死了三回 海盗湾要凉凉?

    想當初,我是受到BT網站海盜灣的啟發,開發了一個DHT下載網站:http://www.ibmid.com,有一段時間通宵編程,理解此個協議. 海盗湾(The Pirate Bay)是世界上最大的 BT ...

  10. Pycharm+QTDesigner+PyQt5环境配置

    python+PyQt5写界面很方便,记录下个人配置环境过程.... 安装软件: pycharm2017 Qt5.9.6 python3.6.6/python2.7.15 配置PyQt5: pytho ...