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框架回顾的更多相关文章

  1. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  2. 爬虫06 /scrapy框架

    爬虫06 /scrapy框架 目录 爬虫06 /scrapy框架 1. scrapy概述/安装 2. 基本使用 1. 创建工程 2. 数据分析 3. 持久化存储 3. 全栈数据的爬取 4. 五大核心组 ...

  3. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  4. 爬虫之scrapy框架

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

  5. Python爬虫进阶(Scrapy框架爬虫)

    准备工作:           配置环境问题什么的我昨天已经写了,那么今天直接安装三个库                        首先第一步:                           ...

  6. 爬虫之Scrapy框架介绍

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

  7. 16.Python网络爬虫之Scrapy框架(CrawlSpider)

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  8. python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍

    scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. 5、爬虫之scrapy框架

    一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...

  10. Python学习---爬虫学习[scrapy框架初识]

    Scrapy Scrapy是一个框架,可以帮助我们进行创建项目,运行项目,可以帮我们下载,解析网页,同时支持cookies和自定义其他功能. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的 ...

随机推荐

  1. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  2. Kubernetes(k8s) docker 修改 /dev/shm大小

    一.问题 /dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间.默认情况下,/dev/shm为物理内存大小的一半. 在Kubernetes上跑docker,发现/dev ...

  3. 前端开发 Vue -4promise解读1

    JS(JavaScript) - Promise 2015年6月, ES2015(即 ECMAScript 6.ES6) 正式发布.其中 Promise 被列为正式规范,成为 ES6 中最重要的特性之 ...

  4. 哈夫曼树详解——PHP代码实现

    在介绍哈夫曼树之前需要先了解一些专业术语 路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层数为1,则从根结点到第L ...

  5. VIO的一些随笔

    大公司跑在手机的似乎都是滤波MSCKF那种,有优化的但似乎功耗不行.还有就是杂交的前端滤波后面在挂地图,反正国内的似乎就是SVO, VINS, ORBSLAM,MSCKF组合起来. 缺啥补啥,那个太烂 ...

  6. LA服务可用性4个9是什么意思?怎么达到?

    SLA:服务等级协议(简称:SLA,全称:service level agreement).是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定.通常这个开销是驱动提供服 ...

  7. thefuck安装和使用(ubuntu)

    系统环境(已测试可用): ubuntu 18.04 lts (server或desktop),ubuntu 19.04(server或desktop) sudo apt update sudo apt ...

  8. linux安装zookeeper,安装zkui,zookeeper可视化

    系统要求 支持的平台 ZooKeeper由多个组件组成.某些组件得到广泛支持,其他组件仅在较小的平台上受支持. 客户端是Java客户端库,应用程序使用它连接到ZooKeeper集合. Server是在 ...

  9. [Golang][Mac]Go 语言学习资料记录

    背景:最近的项目开发语言是GOlang 因此需要做一些简单了解和学习记录 又可以学习一下Google的新语言了,想想有些小激动哦~ 官方网站(需翻墙才能打开,比如用蓝灯)https://golang. ...

  10. JDK源码那些事儿之SynchronousQueue上篇

    今天继续来讲解阻塞队列,一个比较特殊的阻塞队列SynchronousQueue,通过Executors框架提供的线程池cachedThreadPool中我们可以看到其被使用作为可缓存线程池的队列实现, ...