目录

1.选取目标站点

目标站点分析

2.流程框架

3.爬虫实战

创建项目

创建spider

输出调试信息

4.抓取:

1.分析源代码

2.爬取中的存储(数据结构)

3.定义解析的方法

3.命令行交互模式

4.赋值

5.翻页

6.保存


1.选取目标站点

目标站点分析

http://quotes.toscrape.com/:scrapy官方提供的抓取网站

显示名人名言,作者,标签等信息

翻页为最简单的GET请求,通过改变URL的名称进行翻页

网页结构简单,没有任何的反爬虫措施

2.流程框架

抓取第一页

请求第一页的URL并得到源代码,进行下一步的分析

获取内容和下一页链接

分析源代码,提取首页内容,获取下一页链接等待进一步获取

翻页提取

请求下一页信息,分析内容并请求再下一页链接

保存爬取结果

将爬取结果保存为特定格式如文本,数据库

3.爬虫实战

在命令行中输入scrapy会输出提示

创建项目

scrapy startproject quotetutorial

会在当前目录生成项目文件

cd quotetutorial 进入项目文件夹

scrapy.cfg:配置文件,定义scrapy一些相关的部署信息

创建spider

scrapy genspider quotes quotes.toscrape.com

quotes:spider名称

quotes.toscrape.com:需要爬取网站的域名

scrapy.cfg

items.py:保存数据的数据结构

middlewares.py:在爬取过程中定义的中间件,用来处理request,response和exceptions等操作,可以在其中修改request,response和exceptions的相关配置

pipelines.py:项目管道,用来输出一些items

settings.py:定义配置信息

主要运行代码在spiders文件夹中

解析的操作在parse函数中

scrapy crawl quotes:执行spider

输出调试信息

info:提示信息

scrapy.utils.log:显示已启动

2019-06-01 19:34:39 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: firstscrapy)

scrapy.crawler:settings

Overridden settings: {'BOT_NAME': 'firstscrapy', 'NEWSPIDER_MODULE': 'firstscrapy.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['firstscrapy.spiders']}

scrapy.middleware:中间件(下载中间件:downloadermiddlewares;爬虫中间件:spidermiddlewares)

INFO: Spider opened:调用spider,开始抓取

2019-06-01 19:34:41 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None)

2019-06-01 19:34:41 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/> (referer: None)

首先寻找robots.txt,没有返回状态码404,随后访问主页正常为200

statscollectors:输出爬取信息

quotes.py

改写代码:parse:请求完成后默认调用的方法/默认回调

eg:

def parse(self, response):print(response.text)

请求成功后将response的内容打印出来

4.抓取:

1.分析源代码

内容:text

作者:author

标签:tags(tags数量不固定,有几个抓几个)

2.爬取中的存储(数据结构)

items.py

定义field变量赋值,作为一个整体生成

3.定义解析的方法

quotes.py

11:定义选择每个区块

之后遍历每个区块,进一步筛选

13:声明对象

::text:选择标签内的文本内容

extract_first():拿到里面的文本内容

extract():把所有结果都找出来,类似于find和findall

3.命令行交互模式

scrapy shell quotes.toscrape.com

进入到交互模式下,可以进行一些相关的调试

爬取到的quotes为list格式,每一项为selector选择器

同为list

同为list,data类型为str

返回列表,内容为文本

返回第一个值

若为tags,就需要用extract()获取所有的标签

4.赋值

item['text'] = text
item['author'] = author
item['tags'] = tags
yield item#将item生成出来

再次运行,即可完成单页索引信息的爬取

5.翻页

1.可通过改变URL来完成翻页

2.在next中对应着下一页的超链接,从网页代码中获取

提取:

next = response.css('.pager .next a::attr(href)').extract_first()

attr():获取属性的内容

补全为完整的URL:

url = response.urljoin(next)

urljoin():补全URL

生成request,实现翻页循环:

url = response.urljoin(next)

callback:回调函数,定义response请求之后谁来处理

6.保存

保存为json格式

scrapy crawl quotes -o quotes.json

生成json文件并保存在项目目录下

保存为jl格式

scrapy crawl quotes -o quotes.jl

将结果保存为一行一行的格式,一行为一个item

保存为csv格式

scrapy crawl quotes -o quotes.csv

保存为xml格式

scrapy crawl quotes -o quotes.xml

其他格式同改后缀即可,如pickle,marshal等

保存至FTP服务器

scrapy crawl quotes -o ftp://user:pass@ftp.example.com/path/quotes.csv

pipelines

在保存前需要做item的处理,如在解析完后有些item不是我们想要的,如要将item保存到数据库里需要借助pipelines工具。

eg:限制名言的长度,如果大于50将后面的变为省略号

pipelines.py

class TextPipeline(object):def __init__(self):self.limit = 50def process_item(self, item, spider):if item['text']:if len(item['text']) > self.limit:item['text'] = item['text'][0:self.limit].rstrip() + '. . .'else:return DropItem('Missing Text')

保存至MongoDB数据库

pipelines中:

class MongoPipeline(object):def __init__(self):self.mongo_uri = 'localhost'self.mongo_db = 'quotestutorial'def open_spider(self, spider):self.client = pymongo.MongoClient(self.mongo_uri)self.db = self.client[self.mongo_db]def process_item(self, item, spider):name = item.__class__.__name__self.db[name].insert(dict(item))return itemdef close_spider(self, spider):self.client.close()

settings.py中:

ITEM_PIPELINES = {'firstscrapy.pipelines.TextPipeline': 300,'firstscrapy.pipelines.MongoPipeline': 400,
}

保存结果

Python爬虫——Scrapy框架的基本使用相关推荐

  1. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

    这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...

  2. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  3. Python爬虫—Scrapy框架—Win10下载安装

    Python爬虫-Scrapy框架-Win10下载安装 1. 下载wheel 2.下载twisted 3. 下载pywin32 4. 下载安装Scrapy 5. 创建一个scrapy项目 6. fir ...

  4. Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider

    Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider 写在前面 初探Crawl Spider 创建Crawl Spider项目 对比Basic与Crawl ...

  5. python爬虫scrapy框架教程_Python爬虫教程-30-Scrapy 爬虫框架介绍

    从本篇开始学习 Scrapy 爬虫框架 Python爬虫教程-30-Scrapy 爬虫框架介绍 框架:框架就是对于相同的相似的部分,代码做到不出错,而我们就可以将注意力放到我们自己的部分了 常见爬虫框 ...

  6. python爬虫scrapy框架爬取网页数据_Scrapy-Python

    scrapy Scrapy:Python的爬虫框架 实例Demo 抓取:汽车之家.瓜子.链家 等数据信息 版本+环境库 Python2.7 + Scrapy1.12 初窥Scrapy Scrapy是一 ...

  7. Python爬虫——Scrapy框架

    Scrapy是用python实现的一个为了爬取网站数据,提取结构性数据而编写的应用框架.使用Twisted高效异步网络框架来处理网络通信. Scrapy架构: ScrapyEngine:引擎.负责控制 ...

  8. Python爬虫——scrapy框架介绍

    一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...

  9. Python爬虫——Scrapy框架(附有实战)

    大家好!我是霖hero 有一天,我在逛街,突然被一声靓仔打断了我的脚步,回头一看,原来是水果摊阿姨叫我买水果,说我那么靓仔,便宜一点买给我,自恋的我无法拒绝阿姨的一声声靓仔,于是买了很多水果回家,家人 ...

  10. python爬虫scrapy框架基础

    我使用的软件是pychram 最近几周也一直在学习scrapy,发现知识点比较混乱,今天来总结一下.我是按照<精通python网络爬虫核心技术框架与项目实战>这本书来写的.讲的比较简洁,想 ...

最新文章

  1. 洛谷1197星球大战
  2. 一阶暂态电路三要素法和三种响应
  3. WindowsService 安装后报错: 无法启动计算机“.”上的服务 解决方案
  4. 阿里云天池 Python训练营Task5:Python训练营测试 学习笔记
  5. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
  6. 使用 Spark ML Pipeline 进行机器学习
  7. 程序员总被坑?这是GitHub上的一篇防骗指南
  8. 对华为HG255D路由器进行JTAG调试的进一步研究
  9. 如何实现和提升软件易用性
  10. 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论...
  11. 单机传奇找不到登陆器服务器列表,如果传奇服务端里面没有带登陆器怎么办?...
  12. 类似零基础学python的小说_就像看小说一样,让你一个小时学会Python零基础「强烈推荐」...
  13. 【Android studio】使用小米手机(MIUI8)真机调试
  14. Cannot cast ch.qos.logback.classic.servlet.LogbackServletContainerInitializer to javax.servlet.Servl
  15. php面试自我介绍结束语,面试自我介绍的结束语
  16. 相处模式计算机型,三天内,女朋友;大于三天,电脑:两性相处,“尺寸”很重要...
  17. 如何使用AMR M分析rtp流中的amr语音
  18. 解决Retrofit和RxJava 抛出异常报错问题
  19. MySQL--学习笔记
  20. 直扩 单音干扰抑制 matlab,单频干扰在直扩系统中的误码性能分析

热门文章

  1. 信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
  2. Kolmogorov复杂性 简介
  3. 【CQF Finance Class 3 债券】
  4. 度量学习Metric Learning
  5. 程序员35岁以后干什么?大龄程序员现状揭秘
  6. python3调用谷歌翻译_使用python3调用谷歌翻译成中文
  7. 西电计算机学院硕士生导师马,西安电子科技大学计算机学院研究生导师简介-周端...
  8. Exception in thread “main“ java.lang.NoSuchMethodException
  9. TS封装格式小白入门分析总结(二)之工具的使用
  10. Matlab中图形对象属性gcf使用