Infi-chu:

http://www.cnblogs.com/Infi-chu/

1.框架架构图:

2.各文件功能
scrapy.cfg 项目的配置文件
items.py 定义了Item数据结构,所有Item的定义都可以放在这里
pipelines.py 定义了Item Pipeline的实现
settings.py 定义了项目的全局配置
middlewares.py 定义了spider 中间件和downloader中间件
spiders 每一个爬虫的实现,每一个爬虫对应一个文件

3.创建项目

scrapy startproject 项目名

4.创建爬虫

cd 项目名称
scrapy genspider spider名称 网站域名

创建后会生成一个包含文件名的spider类,其中有三个属性和一个方法
三个属性:
name 每个项目唯一的名字
allow_domains 允许爬取的域名
start_urls 在启动时爬取的URL列表
一个方法:
parse() 默认情况下,被调用start_urls里面的链接 构成的请求完成下载执行后,返回的响应就会作为唯一的参数传递给这个函数。这个方法是负责解析返回的响应、提取数据或进一步生成要处理的请求

5.创建Item
Item是保存爬虫的容器,他的使用方法和字典比较类似。
Item需要继承scrapy.Item类且定义类型是scrapy.Field字段。
能获取到的内容有比如有text、author、tags

import scrapy
class spider名Item(scrapy.Item):
text=scrapy.Field()
author=scrapy.Field()
tags=scrapy.Field()

6.解析response
在scrapy.Item类中可以直接对response变量包含的内容进行解析
divclass名.css('.text') 带有此标签的节点
divclass名.css('.text::text') 获取正文内容
divclass名.css('.text').extract() 获取整个列表
divclass名.css('.text::text').extract() 获取整个列表的内容
divclass名.css('.text::text').extract_first() 获取第一个

7.使用Item
对新创建的spider进行改写

import scrapy
from 项目名.item import spider名Item
class spider名Spider(scrapy.Spider):
name = '爬虫名'
allow_domains = ["quotes.toscrape.com"]
start_urls = ["http://quotes.toscrape.com"] def parse(self,response):
r = response.css('.quote')
for i in r:
item = spider名Item()
item['text']=i.css['.text::text'].extract_first()
item['author']=i.css['.author::text'].extract_first()
item['tags']=i.css('.tags .tag::text').extract_first()
yield item

8.后续request
前面讲了初始页面的抓取,现在讲解之后的页面怎么抓取

class spider名Spider(scrapy.Spider):
name = '爬虫名'
allow_domains = ["quotes.toscrape.com"]
start_urls = ["http://quotes.toscrape.com"] def parse(self,response):
r = response.css('.quote')
for i in r:
item = spider名Item()
item['text']=i.css['.text::text'].extract_first()
item['author']=i.css['.author::text'].extract_first()
item['tags']=i.css('.tags .tag::text').extract_first()
yield item next_page=response.css('.pager .next a::attr("href")').extract_first()
url=response.urljoin(next_page)
yield scrapy.Request(url=url,callback=self.parse) # url是请求链接,callback是回调函数,当指定了回调函数的请求完成之后,获取到响应,引擎将把这个响应作为参数传递给这个回调函数,回调函数将进行解析或生成下一个请求。

9.运行

scrapy crawl spider名

10.保存

#保存到JSON文件
scrapy crawl spider名 -o spider名.json # 输入
# 输出
scrapy crawl spider名 -o spider名.jl
scrapy crawl spider名 -o spider名.jsonlines
scrapy crawl spider名 -o spider名.csv
scrapy crawl spider名 -o spider名.pickle
scrapy crawl spider名 -o spider名.xml
scrapy crawl spider名 -o spider名.marshal
scrapy crawl spider名 -o ftp://username:password@.../spider名.xml

11.使用Item Pipeline
如果想存入到数据库或筛选有用的Item,此时需要用到我们自己定义的Item Pipeline
我们一般使用Item Pipeline做如下操作
  清理HTML数据
  验证爬取数据,检查爬取字段
  查重并丢弃重复内容
  将爬取结果保存到数据库
在pipelines.py文件中编写

import pymongo
from scrapy.exceptions import DropItem
class TextPipeline(obj):
def __init__(self):
self.limit=50 def process_item(self,item,spider):
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(obj):
def __init__(self,mongo_uri,mongo_db):
self.mongo_uri=mongo_uri
self.mongo_db=mongo_db @classmethod
def from_crawler(cls,crawl):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DB')
) 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 item def close_spider(self,spider):
self.client.close()

在settings.py中编写

ITEM_PIPELINES = {
'项目名.pipelines.TextPipeline':300,
'项目名.pipelines.MongoPipeline':400,
}
MONGO_URI = 'localhost'
MONGO_DB = '项目名'

Python3爬虫(十七) Scrapy框架(一)的更多相关文章

  1. Python3 爬虫之 Scrapy 框架安装配置(一)

    博客地址:http://www.moonxy.com 基于 Python 3.6.2 的 Scrapy 爬虫框架使用,Scrapy 的爬虫实现过程请参照本人的另一篇博客:Python3 爬虫之 Scr ...

  2. Python3 爬虫之 Scrapy 核心功能实现(二)

    博客地址:http://www.moonxy.com 基于 Python 3.6.2 的 Scrapy 爬虫框架使用,Scrapy 的搭建过程请参照本人的另一篇博客:Python3 爬虫之 Scrap ...

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

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

  4. 爬虫06 /scrapy框架

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

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

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

  6. 爬虫之scrapy框架

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

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

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

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

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

  9. 爬虫之Scrapy框架介绍

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

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

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

随机推荐

  1. 150行JavaScript代码实现增强现实

    增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像.视频.3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这 ...

  2. QT信号和槽在哪个线程执行问题

    时隔四个月后的第一篇,换了个公司可以登录的博客,记录一些学习内容吧 这是看到别人写的比较好的一篇,排版有点乱 QThread的使用方法 起源 昨天不小心看到Qt开发人员( Bradley T.Hugh ...

  3. D3——散点图Scatterplot

    散点图 //Width and height ; ; ; var dataset = [ [, ], [, ], [, ], [, ], [, ], [, ], [, ], [, ], [, ], [ ...

  4. 牛客网多校训练第三场 A - PACM Team(01背包变形 + 记录方案)

    链接: https://www.nowcoder.com/acm/contest/141/A 题意: 有n(1≤n≤36)个物品,每个物品有四种代价pi,ai,ci,mi,价值为gi(0≤pi,ai, ...

  5. CentOS7 安装配置备忘录

    1. 安装 epel 源 $ sudo yum install epel-release.noarch 如果想强制服务器使用 tuna 的镜像,可以如下修改 /etc/yum.repos.d/epel ...

  6. Fine Tuning

    (转载自:WikiPedia) Fine tuning is a process to take a network model that has already been trained for a ...

  7. VS2008 工具栏CMFCToolBar的使用总结(转)

    (一)自定义工具栏 自定义工具栏,分两种情况:一是直接添加工具栏,并自己绘制图标:二是,添加工具栏,然后与BMP关联,与VC6.0中的自定义彩色工具栏类似. 1.  自绘工具栏 1)添加Toolbar ...

  8. NopCommerce 3.4中移动端访问抛弃响应式布局

    在Nop3.4中,他抛弃了原来的xxx.Mobile.cshtml的这种写法,而是采用了响应式布局,并且把规则也给改了,你在后台配置不启用响应式布局,在前台你仍然不能写xxx.Mobile.cshtm ...

  9. <a>标签跳转到Servelet页面并实现参数的传递

    <a>标签跳转到页面不能通过request.setAttribute()和getAttribute()方法获取参数. <a>标签只能通过request.getParameter ...

  10. Office365学习笔记—创建WikiPage

    1,项目有个需求:项目表每更新一次,就把跟该项目有关的任务创建一个静态页(历史版本功能)! 注意事项:需要在页面上拖一个ContentEditer!将代码放在ContentEditer里面,因为我试过 ...