Scrapy高级用法
日志相关
一、日志相关变量
LOG_LEVEL = ''
LOG_FILE = '文件名.log'
二、日志级别
5 CRITICAL :严重错误
4 ERROR :普通错误
3 WARNING :警告
2 INFO :一般信息
1 DEBUG :调试信息
注意: 只显示当前级别的日志和比当前级别日志更严重的
三、其他导出
设置数据导出编码(主要针对于json文件)
FEED_EXPORT_ENCODING = ''
4、非结构化数据存储路径
IMAGES_STORE = '路径'
5、设置User-Agent
USER_AGENT = ''
数据持久化
将数据保存的方法
一、MySQL
有关MySQL请访问MySQL
- 在setting.py中定义相关变量 - # mysql 配置
 MYSQL_HOST = 'xxx.xxx.xxx.xxx'
 MYSQL_USER = 'xxxx'
 MYSQL_PWD = 'xxxxx'
 MYSQL_DB = 'xxxxx'
 MYSQL_CHAR = 'utf8'
 
- pipelines.py中新建管道类,并导入settings模块 - class Mysql(object):
 def open_spider(self,spider):
 # 爬虫开始执行1次,用于数据库连接
 def process_item(self,item,spider):
 # 用于存储抓取的item数据
 def close_spider(self,spider):
 #爬虫结束时执行1次,用于断开数据库连接
 
- settings.py中添加此管道 
 - ITEM_PIPELINES = {'':200}- 注意 : - process_item()函数中一定要- return item ***
第一个管道返回的item会继续交由下一个管道处理,否则返回并传入下一个管道的值为None
二、MongoDB
有关MongoDB请访问MongoDB
- 在settings.py中定义相关变量 - # MongoDB配置
 MONGO_HOST = '10.0.0.7'
 MONGO_PORT = 27017
 
- pipelines.py中新建管道类,并导入settings模块 - class Mysql(object):
 def open_spider(self,spider):
 # 爬虫开始执行1次,用于数据库连接
 def process_item(self,item,spider):
 # 用于存储抓取的item数据
 def close_spider(self,spider):
 #爬虫结束时执行1次,用于断开数据库连接
 
- settings.py中添加此管道 
三、csv
命令格式
scrapy crawl maoyan -o maoyan.csv

四、json
scrapy crawl maoyan -o maoyan.json
这里运行之后,打开maoyan.json

这里是编码的问题,需要在settings.py中指定编码为utf-8
# settings.py
FEED_EXPORT_ENCODING = 'utf-8'

命令行
一、 基本使用
scrapy shell URL地址
request.headers :请求头(字典)
reqeust.meta :item数据传递,定义代理(字典)
response.text :字符串
response.body :bytes
response.xpath('')
二、Requests
1、url
2、callback
3、headers
4、meta :传递数据,定义代理
5、dont_filter :是否忽略域组限制
默认False,检查allowed_domains['']
设置中间件
一、User-Agent
编辑middlewares.py
from fake_useragent import UserAgent
class RandomUseragentMiddleware(object):
	def process_request(self,reuqest,spider):
		request.headers['User-Agent'] = UserAgent().random
设置优先级settings.py
DOWNLOADER_MIDDLEWARES = {'xxx.xxxx.xxx.RandomUseragentMiddleware' : 优先级}
二、代理
编辑middlewares.py
class RandomProxyDownloadMiddlewares(object):
    def process_request(self, reques, spider):
        proxy = 'http://127.0.0.1:8000'
        request.meta['proxy'] = proxy
    def process_exception(self, request, exception, spider):
        # 如果代理不可用,则交给此函数处理
		return request
三、并发
编辑settings.py
CONCURRENT_REQUESTS = 32
默认并发数为16,可根据自身配置酌情设置
四、延时
下载延迟时间(每隔多长时间请求一个网页)
DOWNLOAD_DELAY 会影响 CONCURRENT_REQUESTS,不能使并发显现
有CONCURRENT_REQUESTS,没有DOWNLOAD_DELAY: 服务器会在同一时间收到大量的请求
有CONCURRENT_REQUESTS,有DOWNLOAD_DELAY 时,服务器不会在同一时间收到大量的请求
DOWNLOAD_DELAY = 3
非结构化数据
spider: yield item['链接']
pipelines.py
	from scrapy.pipelines.images import ImagesPiprline
    class SpiderPipeline(ImagesPipe):
        def get_media_requests(self, item, info):
            yield scrapy.Request(item['链接'])
settings.py
	IMAGES_STROE = ''
    ITEM_PIPELINES = {}
Scrapy高级用法的更多相关文章
- Visual Studio 宏的高级用法
		因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ... 
- SolrNet高级用法(分页、Facet查询、任意分组)
		前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ... 
- sqlalchemy(二)高级用法
		sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ... 
- Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
		上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ... 
- 再谈Newtonsoft.Json高级用法
		上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ... 
- Jquery remove 高级用法
		Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ... 
- Newtonsoft.Json高级用法(转)
		手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ... 
- redis(二)高级用法
		redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ... 
- 【转】 Newtonsoft.Json高级用法
		手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ... 
随机推荐
- Java并发之内存模型(JMM)浅析
			背景 学习Java并发编程,JMM是绕不过的槛.在Java规范里面指出了JMM是一个比较开拓性的尝试,是一种试图定义一个一致的.跨平台的内存模型.JMM的最初目的,就是为了能够支多线程程序设计的,每个 ... 
- Go-cron定时任务
			1.cron(计划任务) 按照约定的时间,定时的执行特定的任务(job). cron 表达式 表达了这种约定. cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示. 秒 分 时 日 月 ... 
- springboot整合html时的页面的跳转404
			在用springboot对html的页面进行渲染时,页面找不到报404(type=Not Found, status=404)., 解决办法:是在ctroller层加相应的 @Re ... 
- 使用springboot+layim+websocket实现webim
			使用springboot+layim+websocket实现webim 小白技术社 项目介绍 采用springboot和layim构建webim,使用websocket作为通讯协议,目前已经能够正 ... 
- Scrum 工件: 速度图和燃尽图
			速度图 Velocity用于衡量scrum团队持续提供业务价值的速度,可以采用历史估算的方法,衡量一个又一个sprint的速度.团队通过跟踪完成达到自己团队完成标准的故事点的数量,就可以基于相对点值对 ... 
- springBoot项目配置日志打印管理(log4j2)
			1.修改pom文件引用log4j2相关jar包 依赖代码: <!-- log4j2 start --><!-- Spring Boot log4j2依赖 --><depe ... 
- Java并发编程知识点总结Volatile、Synchronized、Lock实现原理
			Volatile关键字及其实现原理 在多线程并发编程中,Volatile可以理解为轻量级的Synchronized,用volatile关键字声明的变量,叫做共享变量,其保证了变量的“可见性”以及“有序 ... 
- StackOverflow 周报 - 这些高关注的问题你是否都会
			我从 Stack Overflow 上找的了一些高关注度且高赞的问题.这些问题可能平时我们遇不到,但既然是高关注的问题和高点赞的回答说明是被大家普遍认可的,如果我们提前学到了以后不管工作中还是面试中处 ... 
- Windows Server - SVN 服务器搭建与项目配置、客户端安装与配置
			本教程以Windows Server 2012 R12 为例搭建SVN服务器,安装部署完成后,客户端可通过SVN客户端访问SVN服务器上的项目,也可以访问网上其他SVN服务器上的项目. 一.首先准备三 ... 
- Python 基础 (三)
			字典排序 dict = {'a':1,'c':3,'b':2} 字典没有sort方法,可使用sorted排序,默认通过key排序 dict = sorted(dict),print(dict)key的 ... 
