Scrapy框架之Spider模板 转
一、安装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模板 转的更多相关文章
- python爬虫入门(七)Scrapy框架之Spider类
Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...
- 爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline
1. Spider Middleware Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架. 当Downloader生成Response之后,Response会被 ...
- scrapy框架之spider
爬取流程 Spider类定义如何爬取指定的一个或多个网站,包括是否要跟进网页里的链接和如何提取网页内容中的数据. 爬取的过程是类似以下步骤的循环: 1.通过指定的初始URL初始化Request,并指定 ...
- python学习之-用scrapy框架来创建爬虫(spider)
scrapy简单说明 scrapy 为一个框架 框架和第三方库的区别: 库可以直接拿来就用, 框架是用来运行,自动帮助开发人员做很多的事,我们只需要填写逻辑就好 命令: 创建一个 项目 : cd 到需 ...
- Scrapy框架学习(三)Spider、Downloader Middleware、Spider Middleware、Item Pipeline的用法
Spider有以下属性: Spider属性 name 爬虫名称,定义Spider名字的字符串,必须是唯一的.常见的命名方法是以爬取网站的域名来命名,比如爬取baidu.com,那就将Spider的名字 ...
- 爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware
1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...
- 爬虫之scrapy框架
解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...
- 安装scrapy框架的常见问题及其解决方法
下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...
- 利用scrapy框架进行爬虫
今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...
随机推荐
- Django运行项目时候出现DisallowedHost at / Invalid HTTP_HOST header:
web端错误现象: DisallowedHost at / Invalid HTTP_HOST header: 'ip:8000'. You may need to add u'ip' to ALLO ...
- WEditor使用方法
APP的定位方式有: 1. Appium Desktop工具里的Inspector 2. /tools/bin/uiautomatorviewer.bat 最近发现在一个更好用的定位工具: Wedit ...
- JSTL优点
1. 在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植. 2. 简化了JSP和WEB应用程序的开发.3. 以一种统一的方式减少了JSP中的scriptlet代码 ...
- iscsi序列二、iscsi多路径配置方式
一.ISCSI多路径应用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 如上图,如果SAN服务器与客户端交换机只有一条线路 ...
- Product - 产品经理 - 转型
特别说明 本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达. - ISBN: 9787568041591 - https://book.douban. ...
- DS18b20温度传感器基础使用
认识管脚 认识唯一标示的64位地址序列号 寄存器数据译码成温度值(下面只针对12位转化的,还有9..10等其他位的转化方式,不同位的转化,其精度也不同) 传感器存储器 配置寄存器使用说明 DS18b2 ...
- 【VS开发】CFormView
原文地址:CFormView作者:罗纳尔多 CFormView是MFC使用无模式对话框的一个典型例子.CFormView是基于对话框模板创建的视,它的直接基类是CSrcollView,CSrcollV ...
- LeetCode之链表总结
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度.作为一种常用的数据结构,链表内置在很多高级编程语言里面.既比数组复杂又比树简单,所以链表经常被面试官 ...
- vue 简易学习
好记性不如烂笔头 最近公司新出一个框架,采用的是前后端分离的开发方式,后端用的是springboot+mybatis(还有额外的zk.缓存.日志等待),前端采用的是vue+es6,由于以前对vue只知 ...
- PyQt5创建多线程
参阅: https://blog.csdn.net/chengmo123/article/details/96477103 https://www.cnblogs.com/zhuminghui/p/9 ...