一、安装scrapy

首先安装依赖库Twisted

    pip install (依赖库的路径)

    在这个网址http://www.lfd.uci.edu/~gohlke/pythonlibs#twisted 下面去寻找符合你的python版本和系统版本的Twisted

然后在安装scrapy框架

    pip install scrapy

    【注意】路径名不能有中文,不能用管理员进入cmd,电脑系统用户路径不能是中文

二、框架简介

该框架是一个第三方的框架,许多功能已经被封装好(比如:下载功能)

 
流程原理图
由五部分构成:

引擎、下载器、爬虫、调度器、管道(item和pipeline)

以上五部分我们只需要关系其中的两部分:爬虫和管道

spiders:蜘蛛或爬虫,我们分析网页的地方,我们主要的代码写在这里

管道:包括item和pipeline,用于处理数据

引擎:用来处理整个系统的数据流,触发各种事务(框架的核心)

下载器:用于下载网页内容,并且返回给蜘蛛(下载器基于Twisted的高效异步模型)

调度器:用来接收引擎发过来的请求,压入队列中等处理任务

三、使用

  • 创建项目指令
scrapy startproject 项目名
  • 项目目录结构
firstSpider     项目名称
firstSpider
spiders 爬虫目录(写代码位置)
__init__.py
myspider.py 爬虫文件,以后的爬虫代码写在这里
__init__.py
items.py 定义数据结构地方
middlewares.py 中间件(了解)
pipelines.py 管道文件
settings.py 项目配置文件
scrapy.cfg
  • 创建爬虫指令
scrapy genspider 爬虫名 域名
  • 运行爬虫指令
scrapy crawl 爬虫名
scrapy crawl 爬虫名 -o xxx.csv\json\xml

四、执行流程

1输入scrapy crawl '项目名称'
2读取setting.py配置信息
3执行spiders目录下的爬虫程序,执行_init_()方法和parse()方法
4在parse方法里解析html,返回一个item实4按照配置顺序执行pipelines.py(可多个)执行逻辑,一般是存储。
5程序结束。

五、管道包含 items and pipline

  • 作用

1、清理HTML数据。

2、验证爬取数据,检查爬取字段。

3、查重并丢弃重复内容。

4、将爬取结果保存到数据库。

  • 几个核心的方法

创建一个项目的时候都会自带pipeline其中就实现了process_item(item, spider)方法

1、open_spider(spider)就是打开spider时候调用的,常用于初始化操作(常见开启数据库连接,打开文件)
2、close_spider(spider)关闭spider时候调用,常用于关闭数据库连接
3、from_crawler(cls, crawler)是一个类方法(需要使用@classmethod装饰器标识),一般用来从settings.py中获取常量的 4、process_item(item, spider)是必须实现的,别的都是选用的!
- 参数
item是要处理的item对象
spider当前要处理的spider对象 - 返回值
返回item就会继续给优先级低的item pipeline二次处理
如果直接抛出DropItem的异常就直接丢弃该item
  • piplines.py

进行数据存储

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import csv
import pymysql
# 写入csv表格
class InterestingPipeline(object): # 开启爬虫
def open_spider(self,spider):
self.csv_file = open("u148.csv",'w',encoding='utf-8')
# 创建一个列表用于整合csv数据
self.csv_items = [] def process_item(self, item, spider):
# 整合csv数据
# 把item字典转化成列表
csv_item =[]
csv_item.append(item['title'])
csv_item.append(item['author'])
csv_item.append(item['intro'])
csv_item.append(item['img'])
csv_item.append(item['type'])
csv_item.append(item['date']) self.csv_items.append(csv_item) # 【注意】这里每遍历一个item以后一定要把他返回出去,如果不返回,其它优先级比这个管道低的就无法获取到其它item
return item def close_spider(self,spider): # 把前面整合完成的数据写入csv文件
writer = csv.writer(self.csv_file)
# 写表头
writer.writerow(['title','author','intro','img','type','date'])
# 写内容
writer.writerows(self.csv_items)
self.csv_file.close() # 定义一个管道类,用于写入数据库
class MysqlPipeline(object): def open_spider(self,spider):
self.db =pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db='u148',charset='utf8')
self.cursor =self.db.cursor()
# self.db.begin() def process_item(self,item,spider):
# 定义sql语句
sql = "INSERT INTO music VALUES(NULL,'%s','%s','%s','%s','%s','%s')"%(item['title'],item['author'],item['img'],item['intro'],item['type'],item['date'])
self.cursor.execute(sql)
self.db.commit()
return item def close_spider(self,spider):
self.cursor.close()
self.db.close()
  • items.py
import scrapy
# 主要是对待爬取的数据进行模型化,并且对接需求分析 class InterestingItem(scrapy.Item):
# 本质是一个字典对象, # define the fields for your item here like:
# name = scrapy.Field()
# 网页里面需要爬取那些内容
# title
title = scrapy.Field()
# 图片
img = scrapy.Field() # 简介
intro = scrapy.Field()
# 作者
author = scrapy.Field()
# 类型
type = scrapy.Field()
# 日期
date = scrapy.Field()

五、settings配置

  • 代理设置
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
  • 是否遵循robots协议
ROBOTSTXT_OBEY = False
  • 下载延时
# 单位:秒
DOWNLOAD_DELAY = 2
  • 默认请求头
DEFAULT_REQUEST_HEADERS = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
'Connection': 'keep-alive',
# 'Host': 'passport.weibo.cn',
'Origin': 'https://passport.weibo.cn',
'Referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&r=https%3A%2F%2Fweibo.cn%2F%3Fluicode%3D20000174&backTitle=%CE%A2%B2%A9&vt=' }
  • 开启管道
ITEM_PIPELINES = {
#300表示优先级,范围(0-1000),越小级别越高
'Weibo.pipelines.WeiboPipeline': 300,
}
 

Scrapy框架之Spider模板 转的更多相关文章

  1. python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...

  2. 爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline

    1. Spider Middleware Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架. 当Downloader生成Response之后,Response会被 ...

  3. scrapy框架之spider

    爬取流程 Spider类定义如何爬取指定的一个或多个网站,包括是否要跟进网页里的链接和如何提取网页内容中的数据. 爬取的过程是类似以下步骤的循环: 1.通过指定的初始URL初始化Request,并指定 ...

  4. python学习之-用scrapy框架来创建爬虫(spider)

    scrapy简单说明 scrapy 为一个框架 框架和第三方库的区别: 库可以直接拿来就用, 框架是用来运行,自动帮助开发人员做很多的事,我们只需要填写逻辑就好 命令: 创建一个 项目 : cd 到需 ...

  5. Scrapy框架学习(三)Spider、Downloader Middleware、Spider Middleware、Item Pipeline的用法

    Spider有以下属性: Spider属性 name 爬虫名称,定义Spider名字的字符串,必须是唯一的.常见的命名方法是以爬取网站的域名来命名,比如爬取baidu.com,那就将Spider的名字 ...

  6. 爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware

    1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...

  7. 爬虫之scrapy框架

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

  8. 安装scrapy框架的常见问题及其解决方法

    下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...

  9. 利用scrapy框架进行爬虫

    今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...

随机推荐

  1. RabbitMQ学习之:(八)Topic Exchange (转贴+我的评论)

    From: http://lostechies.com/derekgreer/2012/05/18/rabbitmq-for-windows-topic-exchanges/ RabbitMQ for ...

  2. MongoDB的安装及配置(Win7)

    一.下载MongoDB 登录Mongodb官网https://www.mongodb.com/download-center#community 二.安装MongoDB 安装真的比较简单 next就可 ...

  3. flask(1.0)

    目录 一. 关于KeyError和IndexError 二. Python三大主流框架对比 三. flask基础 1.安装flask 2.用flask写出的第一个页面 3.Flask的Response ...

  4. openstack——Rabbitmq集群部署

    一.前期准备 1.条件:准备3台Linux系统虚拟机,保持系统版本一致,确保配置好yum源,及网络源     2.3台虚拟机做静态解析 [root@yun1 ~]# cat /etc/hosts 12 ...

  5. Docker容器组件

    从docker1.11版本开始,docker容器运行已经不是简单的通过docker daemon守护进程来启动,而是集成了containerd.containerd-shim.runC等多个组件.do ...

  6. Ubuntu下安装Golong并用Vscode做IDE最有效方法,避免99%的坑 | 轻松学习GO

    最详细的教程,避开99%的坑,亲测有效 由于大部分教程都是win版本的,所以专门总结了一个linux版本的,其核心在于环境配置和插件安装,经历本人通宵7小时解决了这个问题,用自己的踩坑帮助大家避坑,希 ...

  7. JAVA实验报告及第七周总结

    JAVA第六周作业 实验报告五 第一题 1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图 ...

  8. 基于JAVA Socket的底层原理分析及工具实现

    前言 在工作开始之前,我们先来了解一下Socket 所谓Socket,又被称作套接字,它是一个抽象层,简单来说就是存在于不同平台(os)的公共接口.学过网络的同学可以把它理解为基于传输TCP/IP协议 ...

  9. [转帖]瀚高数据库创建uuid的方法

    使用syssso登录,并执行下列语句 highgo=> select set_secure_level('off'); set_secure_level -------------------- ...

  10. Oracle的查询-单行查询

    单行函数:作用于一行,返回一个值 多行函数:作用于多行,返回一个值 字符函数 --小写变大写 select upper('yes') from dual; --YES --大写变小写 select u ...