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的内容) [爬取的是杨子晚报 ...
随机推荐
- Jmeter: PATCH方法无法发送参数的暂时解决方法
Jmeter: PATCH方法无法发送参数的暂时解决方法 最近在做API测试,前面的GET这些HTTP Request方法都无压力,顺利解决. 但碰到PATCH方法时,发现无法通过. 通过对比,发现P ...
- 关于 /proc/sys/net/ipv4/下 文件的详细解释
关于 /proc/sys/net/ipv4/下 文件的详细解释: 1) /proc/sys/net/ipv4/ip_forward 该文件表示是否打开IP转发. 0,禁止 1,转 ...
- redis报错解决
1.Connecting to node 127.0.0.17000 [ERR] Sorry, can't connect to node 192.168.1.917000 redis集群:Conne ...
- redis开启持久化、redis 数据备份与恢复
redis持久化介绍 https://segmentfault.com/a/1190000015897415 1. 开启aof持久化.以守护进程启动.远程访问先把配置文件拷贝一份到/etc/redi ...
- vue中 key 值的作用
原文地址 我们知道,vue和react都实现了一套虚拟DOM,使我们可以不直接操作DOM元素,只操作数据便可以重新渲染页面.而隐藏在背后的原理便是其高效的Diff算法. vue和react的虚拟DOM ...
- Google 搜索语法
1. 逻辑与/或:AND/OR注意 AND.OR 必须大写OR 指令优先于 AND 指令AND 指令一般以space或+代替OR 指令可用 | 代替2. 逻辑非:-3. 完整匹配:" &qu ...
- python-Web-django-商城-购物车商品加减
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 爬取汽车之家新闻图片的python爬虫代码
import requestsfrom bs4 import BeautifulSouprespone=requests.get('https://www.autohome.com.cn/news/' ...
- 【Abode Air程序开发】iOS证书(.p12)和描述文件(.mobileprovision)申请
iOS证书(.p12)和描述文件(.mobileprovision)申请 5+App开发 Apple证书 iOS证书 iOS有两种证书和描述文件: 证书类型 使用场景 开发(Development)证 ...
- 【VS开发】RIbbon编程
多彩界面,Ribbon编程 Ribbon是类似于office2007样式的界面,它替代了传统的MFC程序里的菜单和工具栏,MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面 ...