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进行序列化返回数 ...
随机推荐
- CSV Data Set Config 拓展开发
1.目的 在日常的性能测试项目中,经常会遇到参数化的问题,我们所熟知的LR工具对参数化支持非常友好,然而JMeter相对逊色一些.大家都知道在使用JMeter工具参数化时常用CSV Data Set ...
- SpringBoot 缓存模块
默认的缓存配置 在诸多的缓存自动配置类中, SpringBoot默认装配的是SimpleCacheConfigguration, 他使用的CacheManager是 CurrentMapCacheMa ...
- spring-boot-plus项目目录结构(六)
spring-boot-plus项目目录结构 目录结构 bin:启动/重启命令脚本目录 logs:部署后记录日志目录 assembly:maven打包配置文件目录 java:源代码目录 resourc ...
- JS 一些有意思的写法
对于 C语言中的 &&(有一个为假,返回的为false) 和 || (有一个为真,即为真),但是对于 JS中的 && 和 || 运算是有所不同的. 详情见下面: &am ...
- c++json构建与解析组件 RapidJSON 没用过永远不会知道有多好用
参考资料: 官方文档 推荐[腾讯RapidJSON]学习笔记 原理请参考以上资料 构建json Document doc; Document::AllocatorType &allocator ...
- Docker搭建Zookeeper&Kafka集群
最近在学习Kafka,准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯..主要是懒). 环境准备 一台可以上网且有CentOS7虚拟机的电脑 为什么使用虚 ...
- Web前端和Web后端的区分
版权声明:本文为CSDN博主「十豆三展」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/zz1399590022 ...
- mysql像通讯录一样把中文按字母排序的sql
select reimer from lendreimbursement_reimburserecord ORDER BY convert(reimer USING gb2312 ) asc; 是用c ...
- pip安装ansible的过程
我的python环境已经搭好了pip,可以用pip直接安装. 1.首先要安装基础环境: 1)yum install gcc glibc-devel zlib-devel rpm-build opens ...
- 安装VMware Workstation时遇到Microsoft Runtime DLL安装程序未能完成安装
解决:这时不要点确定.开始菜单运行输入‘%temp%’,在弹出的窗体中找到一个文件名中含‘{XXXXXXXXXXXXX}~setup'的文件夹,打开里面会看到有 xxx.msi的,运行就开始vmwar ...