爬虫(九):scrapy框架回顾
一:安装scrapy
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 scrapy
e. 下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/
二:基本操作
(1)新建工程:在创建工程之前先进入想用来保存代码的目录,然后执行
scrapy startproject xxx #创建项目
Microsoft Windows [版本 10.0.16299.309]
(c) Microsoft Corporation。保留所有权利。 C:\Users\felix>cd C:\Users\felix\PycharmProjects\scrapy_quotes C:\Users\felix\PycharmProjects\scrapy_quotes>scrapy startproject quotes
New Scrapy project 'quotes', using template directory 'c:\\users\\felix\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\scrapy\\templates\\project', created in:
C:\Users\felix\PycharmProjects\scrapy_quotes\quotes You can start your first spider with:
cd quotes
scrapy genspider example example.com
执行这条命令将创建一个新目录:包括的文件如下:
scrapy.cfg:项目配置文件
quotes/:项目python模块,待会代码将从这里导入
quotes/items:项目items文件
quotes/pipelines.py:项目管道文件
quotes/settings.py:项目配置文件
quotes/spiders:放置spider的目录
(2):创建爬虫
cd quotes # 先进入项目目录
scrapy genspider name name.com # 创建爬虫
scrapy crawl name # 运行爬虫
(3):创建的爬虫类解析
import scrapy
from quotes.items import QuotesItem class QuotespiderSpider(scrapy.Spider):
name = 'quotespider' # 爬虫名称
allowed_domains = ['quotes.toscrape.com'] # 允许爬虫访问的域名,可以多个
start_urls = ['http://quotes.toscrape.com/'] # 爬虫开始的url地址 def parse(self, response): # 爬虫返回的数据解析函数
quotes = response.css('.quote') # 通过css选择器选择相应的内容
for quote in quotes:
item = QuotesItem() # item做数据持久化的
text = quote.css('.text::text').extract_first() # ::text 表示输出文本内容
author = quote.css('.author::text').extract_first() # ::text 表示输出文本内容
tags = quote.css('.tags .tag::text').extract() # extract_first() 表示找第一个,extract()表示找到所有,并返回一个列表
item['text'] = text # 赋值 首先要在items类中创建
item['tags'] = tags
item['author'] = author
yield item # 生成item 做数据存储
next = response.css('.pager .next a::attr(href)').extract_first() # 得到相对的url
url = response.urljoin(next) # 获取一个绝对的url,获取下一页的url
yield scrapy.Request(url=url, callback=self.parse) # 处理链接,将返回的response交给callback的回调函数 # scrapy shell quotes.toscrape.com # 进入命令行调试
# scrapy crawl quotes -o quotes.json(.csv .xml) # 数据保存,可以保存多个类型
(4):items类解析
Items是将要装载抓取的数据的容器,它工作方式像python里面的字典,但它提供更多的保护,比如对未定义的字段填充以防止拼写错误。
它通过创建一个scrapy.item.Item类来声明,定义它的属性为scrpy.item.Field对象,就像是一个对象关系映射(ORM).
我们通过将需要的item模型化,来控制获得的站点数据,比如我们要获得站点的名字,url和网站描述,我们定义这三种属性的域。要做到这点,我们编辑在quotes目录下的items.py文件,我们的Item类将会是这样
import scrapy class QuotesItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
text=scrapy.Field() #创建文本字段
author=scrapy.Field() # 创建作者字段
tags=scrapy.Field() # 创建标签字段
(5):pipeline类解析
import pymongo
from scrapy.exceptions import DropItem # 要使用pipline一定要在设置中指定
class QuotesPipeline(object):
def process_item(self, item, spider):
return item # 一个pipeline要么返回item 要么返回dropitem
class TextPipeline(object):
def __init__(self):
self.limit = 50 def process_item(self, item, spider):
# 这里的item为item类中的item
# 大于50字的文本进行处理
if item['text']:
if len(item['text']) > self.limit:
item['text'] = item['text'][0:self.limit].rstrip() + '...'
return item
else:
return DropItem('Missing Text') # 添加数据库的操作
class MongoPipeline(object):
def __init__(self, mongo_url, mongo_db):
# 初始化数据库
self.mongo_url = mongo_url
self.mongo_db = mongo_db
# 该类方法可以从设置中读取数据
@classmethod
def from_crawler(cls, crawler):
return cls(
# 从设置里面获取数据库的设置信息
mongo_url=crawler.settings.get('MONGO_URL'),
mongo_db=crawler.settings.get('MONGO_DB')
) def open_spider(self, spider): # 启动爬虫时做的操作
# 初始化数据库
self.client = pymongo.MongoClient(self.mongo_url)
self.db = self.client[self.mongo_db]
# 处理item的方法,必须实现返回item或者dropitem
def process_item(self, item, spider):
name = item.__class__.__name__ # item的名称
self.db[name].insert(dict(item))
return item def close_spider(self, spider):
self.client.close() # 结束爬虫时关闭数据库
(6):运行
scrapy crawl quotespider。
爬虫(九):scrapy框架回顾的更多相关文章
- Python网络爬虫之Scrapy框架(CrawlSpider)
目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...
- 爬虫06 /scrapy框架
爬虫06 /scrapy框架 目录 爬虫06 /scrapy框架 1. scrapy概述/安装 2. 基本使用 1. 创建工程 2. 数据分析 3. 持久化存储 3. 全栈数据的爬取 4. 五大核心组 ...
- Python逆向爬虫之scrapy框架,非常详细
爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...
- 爬虫之scrapy框架
解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...
- Python爬虫进阶(Scrapy框架爬虫)
准备工作: 配置环境问题什么的我昨天已经写了,那么今天直接安装三个库 首先第一步: ...
- 爬虫之Scrapy框架介绍
Scrapy介绍 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内 ...
- 16.Python网络爬虫之Scrapy框架(CrawlSpider)
引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...
- python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍
scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...
- 5、爬虫之scrapy框架
一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...
- Python学习---爬虫学习[scrapy框架初识]
Scrapy Scrapy是一个框架,可以帮助我们进行创建项目,运行项目,可以帮我们下载,解析网页,同时支持cookies和自定义其他功能. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的 ...
随机推荐
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- Kubernetes(k8s) docker 修改 /dev/shm大小
一.问题 /dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间.默认情况下,/dev/shm为物理内存大小的一半. 在Kubernetes上跑docker,发现/dev ...
- 前端开发 Vue -4promise解读1
JS(JavaScript) - Promise 2015年6月, ES2015(即 ECMAScript 6.ES6) 正式发布.其中 Promise 被列为正式规范,成为 ES6 中最重要的特性之 ...
- 哈夫曼树详解——PHP代码实现
在介绍哈夫曼树之前需要先了解一些专业术语 路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层数为1,则从根结点到第L ...
- VIO的一些随笔
大公司跑在手机的似乎都是滤波MSCKF那种,有优化的但似乎功耗不行.还有就是杂交的前端滤波后面在挂地图,反正国内的似乎就是SVO, VINS, ORBSLAM,MSCKF组合起来. 缺啥补啥,那个太烂 ...
- LA服务可用性4个9是什么意思?怎么达到?
SLA:服务等级协议(简称:SLA,全称:service level agreement).是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定.通常这个开销是驱动提供服 ...
- thefuck安装和使用(ubuntu)
系统环境(已测试可用): ubuntu 18.04 lts (server或desktop),ubuntu 19.04(server或desktop) sudo apt update sudo apt ...
- linux安装zookeeper,安装zkui,zookeeper可视化
系统要求 支持的平台 ZooKeeper由多个组件组成.某些组件得到广泛支持,其他组件仅在较小的平台上受支持. 客户端是Java客户端库,应用程序使用它连接到ZooKeeper集合. Server是在 ...
- [Golang][Mac]Go 语言学习资料记录
背景:最近的项目开发语言是GOlang 因此需要做一些简单了解和学习记录 又可以学习一下Google的新语言了,想想有些小激动哦~ 官方网站(需翻墙才能打开,比如用蓝灯)https://golang. ...
- JDK源码那些事儿之SynchronousQueue上篇
今天继续来讲解阻塞队列,一个比较特殊的阻塞队列SynchronousQueue,通过Executors框架提供的线程池cachedThreadPool中我们可以看到其被使用作为可缓存线程池的队列实现, ...