scrapy下载 大文件处理
# 一个校花网图片下载的案例,也适合大文件处理,多个文件视频,音频处理
工程流程 --
scrapy startproject xx
cd xx
scrapy genspider hh www.xx.com
爬虫执行 scrapy crawl hh
import scrapy
from yyl.items import YylItem class ExampleSpider(scrapy.Spider):
name = 'xiaohua'
# allowed_domains = ['example.com']
start_urls = ['http://www.521609.com/daxuemeinv/'] def parse(self, response):
li_lst = response.xpath('//*[@id="content"]/div[2]/div[2]/ul/li')
# print(li_lst) for li in li_lst:
item = YylItem() #实例化
# item['src'] = 'http://www.521609.com{}'.format(li.xpath('./a/img/@src').extract_first())
item['src'] = 'http://www.521609.com' + li.xpath('./a/img/@src').extract_first() # 拼接完整地址
yield item # 管道负责 下载url 视频 压缩包 大文件下载的机制
爬虫文件
import scrapy class YylItem(scrapy.Item):
# define the fields for your item here like:
src = scrapy.Field()
items.py
import scrapy
from scrapy.pipelines.images import ImagesPipeline class YylPipeline(object):
def process_item(self, item, spider):
print(item)
return item # 使用一个scrapy封装好的一个专门用于大文件下载的管道类
class ImgPipeline(ImagesPipeline):
# 进行大文件的请求
def get_media_requests(self, item, info):
yield scrapy.Request(url=item['src']) # 用于指定被下载文件的名称
def file_path(self, request, response=None, info=None):
url = request.url
filename = url.split('/')[-1]
return filename #
def item_completed(self, results, item, info):
print(results) # 结果 True,{url path checksum}
return item # process_item中的return item 作用一致
管道.py
BOT_NAME = 'yyl' SPIDER_MODULES = ['yyl.spiders']
NEWSPIDER_MODULE = 'yyl.spiders' # Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' # Obey robots.txt rules
ROBOTSTXT_OBEY = False # Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32 # Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default)
#COOKIES_ENABLED = False # Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False # Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#} # Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# 'yyl.middlewares.YylSpiderMiddleware': 543,
#} # Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# 'yyl.middlewares.YylDownloaderMiddleware': 543,
#} # Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#} # Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'yyl.pipelines.YylPipeline': 301,
'yyl.pipelines.ImgPipeline': 300,
}
IMAGES_STORE = './imgs' LOG_LEVEL = 'ERROR'
settings.py

scrapy下载 大文件处理的更多相关文章
- 转(Response.WriteFile 无法下载大文件解决方法)
以前用Response.WriteFile(filename),但当遇到大文件时无法完整下载. 该方法最大的问题,它不是直接将数据抛到客户端,而是在服务器端(IIS)上缓存.当下载文件比较大时,服务器 ...
- python下载大文件
1. wget def download_big_file_with_wget(url, target_file_name): """ 使用wget下载大文件 Note: ...
- python 下载大文件
当使用requests的get下载大文件/数据时,建议使用使用stream模式. 当把get函数的stream参数设置成False时,它会立即开始下载文件并放到内存中,如果文件过大,有可能导致内存不足 ...
- ASP.Net 下载大文件的实现
当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移 ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ...
- ASP.NET Core下载大文件的实现
当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...
- [libcurl]_[0基础]_[使用libcurl下载大文件]
场景: 1. 在Windows编程时, 下载http页面(html,xml)能够使用winhttp库,可是并非非常下载文件,由于会失败. 由此引出了WinINet库,无奈这个库的稳定性比較低,使用样例 ...
- ASP.Net 下载大文件的实现 (转)
原文:http://www.cnblogs.com/luisliu/p/4253815.html 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃 ...
- Linux如何使用cURL分割下载大文件
Linux如何使用cURL分割下载大文件 - 51CTO.COM http://os.51cto.com/art/201508/489368.htm
随机推荐
- 使用Vmware过程中,突然网络连接不上问题
###第一次的解决方法: 1.我一般过一段时间就会对虚拟机进行拍快照备份:在使用过程中,如果没有太大变化,恢复网络正常的快照一般是能解决问题的,但是要记得恢复快照之前要备份你已经修改过的所有东西,以防 ...
- django css文件导入,模板继承
今天写了一下模板继承 刚开始感觉还行,也挺简单的 当只有html的时候还是能继承到的,代码如下.首先在父html文件里加入 {% block content %} {% block extracss ...
- android 代码实现模拟用户点击、滑动等操作
/** * 模拟用户点击 * * @param view 要触发操作的view * @param x 相对于要操作view的左上角x轴偏移量 * @param y 相对于要操作view的左上角y轴偏移 ...
- 【Unity|C#】基础篇(10)——泛型(Generic)/ 泛型约束条件(where)
[学习资料] <C#图解教程>(第17章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...
- 关于按下ctrl+z后,之后的cin失效的问题
下面这代码按下Ctrl+z结束while输入后,接下来的cin >> val2就无法输入了 #include <iostream> #include <vector> ...
- 题解【AcWing177】噩梦
题面 考虑双向广搜. 我们需要记录男孩和女孩的当前位置,并且每次都进行扩展. 记录一个数组 \(st[i][j]\) . 如果 \(st[i][j]=0\) ,说明 \((i,j)\) 还没有被男孩和 ...
- 题解 【Codeforces988E】Divisibility by 25
本题是数论好题! 首先我们需要了解一个关于数论的性质: 一个数只要后两位能被25(或4)整除,这个数就能被25(或4)整除. 同理,后三位:(或8).后四位:(或16)亦是如此. 所以,我们只需要判断 ...
- PP: Overviewing evolution patterns of egocentric networks by interactive construction of spatial layouts
Problem: get an overall picture of how ego-networks evolve is a common challenging task. Existing te ...
- C++-对象指针的滥用
C++ 中经常出现使用对象指针,而不是直接使用对象本身的代码,比如下面这个例子: Object *myObject = new Object; 而不是使用: myObject.testFunc(); ...
- 【metasploit教程】之建立数据库
在我们通过search命令搜索时,我们会发现搜索的很慢(慢搜索)而且会报错: 启动postgresql: service postgresql strart 启动metasploit会开始建立数据表: ...