Python 爬虫时间优化——设置不自动读取响应正文,避免自动读取大文件

2023-11-14

Python 爬虫优化——设置不自动读取响应正文,避免自动读取大文件

有的童鞋可能发现,自己的项目,自从按推荐,升级uillib库到urllib3之后,爬虫什么的,有时候会特别耗时,然而自己只不过是分析一下网页,不该如此。

排查时我们往往发现,在某个链接卡住了。

这要从 Python 的 urllib3说起,它的网络请求默认会自动读取响应体正文。这会导致什么问题?导致一旦加载链接,直接全部读取,而网络上常常包含有图片、视频、压缩文件、软件、APP等体积较大甚至突破天际的文件。于是……悲剧就诞生了。

即使我们根据链接名称,过滤掉这些软件,然而仍会存在漏网之鱼——某些网站搞出来的链接,不包含文件后缀,导致不知道是否要过滤掉。怎么办?

答案是对http响应头进行分析,符合条件,再读取响应正文,http响应头中包含的东西很多,例如
content-type: image/pngcontent-length: 960

依据这些条件,可以判断文件类型(MimeType),文件大小之后,再决定是否读取。

对于使用urlib来说,不必担心,而使用urllib3以及以urllib3为基础的库(例如request),可能都存在该问题,urllib3则设置preload_content=False, 分析请求头之后再决定是否读取内容即可

res = urllib3.request(method="GET", url=url,preload_content=False)
if int(content_length) > 1024 * 1024:
    # > 1M
    return
if "image" in content_type:
    res.data
……

PS
对于request库而言,默认很可能也是直接读取的,对应的配置是
stream: (optional) if False, the response content will be immediately downloaded.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 爬虫时间优化——设置不自动读取响应正文,避免自动读取大文件 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 网络安全工程师

    岗位职责 1 分析网络现状 对网络系统进行安全评估和安全加固 设计安全的网络解决方案 2 在出现网络攻击或安全事件时 提高服务 帮助用户恢复系统及调查取证 3 针对客户网络架构 建议合理 的网络安全解决方案 4 负责协调解决方案的客户化实施
  • CISSP-安全和风险管理

    俗话说什么是网络安全 那网络安全的基本原则有哪些呢 主要是有可用性 保密性 完整性 1 那什么是可用性 可用性的话 那就是在我们的数据和资源需要随时保持能够授权用户进行访问 用户想要访问想要用的时候 你就应该能用 而不是不能用 2 那什么是
  • Vijava 学习笔记之 DataStore(基础配置信息)

    vijava 代码 实体类 package com vmware pojo import java util ArrayList import java util Calendar 存储信息 author zhb public class
  • R语言实战笔记 基本统计分析-相关

    相关 相关系数可以用来描述定量变量之间的关系 将使用R基础安装中的state x77数据集 提供了美国50个州在1977年的人口 收入 文盲率 预期寿命 谋杀率和高中毕业率数据等 数据如下 相关的类型 Pearson Spearman和Ke
  • Markdown语法详解

    Markdown语法 标题 一级标题 一级标题 二级标题 二级标题 三级标题 三级标题 四级标题 四级标题 五级标题 五级标题 段落 前后空行超过一行 即为一个段落 标题 副标题 正文 表格 ID 用户名 昵称 1 root ROOT 2
  • Node 调试利器,前端、Node 开发必备 - VSCode JS Debug Terminal

    经常看到有同学抱怨 Node 调试麻烦或者是搞不清怎么调试各种脚本 Jest Webpack 等等 而偶尔看到的调试相关的文章又全都是在写 inspect launch json 这些方案 其实有一定学习成本 而其实在 VSCode 中早已
  • [OCCT] Open CASCADE Technology的编译(包含示例的编译)

    QQ交流群 604668232 OCCT知识库 yuque com softdev occt 持续更新 相关文档 官方文档 构建 调试和升级 官方文档 OCCT的构建 文章目录 源代码目录 编译源代码 方法一 使用官方提供的VS工程 方法二
  • 【AAAI-2019】论文整理(清单)

    AAAI 19 Accepted Papers Main Technical Track 整理自 AAAI官网 分类整理持续更新 详细文章可从arXiz org下载 CircConv A Structured Convolution wit
  • VSCode远程配置流程(详细图解)

    基本情况 基本需求 本地 Win10 系统下安装 VSCode 连接远程的服务器 Ubuntu 进行代码编写和调试 下载地址 vscode 图文安装流程 Remote SSH 远程插件 按照下图安装即可 安装完成后 弹出如下图中红色框内的控
  • VoTT使用教程

    VoTT是微软发布的用于图像目标检测的标注工具 它是基于javascript开发的 因此可以跨Windows Linux和Mac平台运行 并且支持从图片和视频读取标注 此外 其还提供了基于CNTK训练的faster rcnn模型进行自动标注
  • 如何查看本机 MySQL(DB)安装位置

    首先按住 win R 键 输入 services msc 找到正在运行的 MySQL 打开属性 之后就可以找到 文件路径了
  • 【八股】2023秋招八股复习笔记2(C++基础 & 操作系统)

    文章目录 1 内存深拷贝 代码 2 C 基础知识 虚函数了解吗 说一下static 关键字的作用 说一下C 和C 的区别 c 中四种强制 cast 转换 请说一下C C 中指针和引用的区别 请你说一下你理解的c 中的smart pointe
  • ESP32/ESP8266使用MicroPython控制DHT11/DHT22

    本教程介绍了如何使用MicroPython固件将DHT11或DHT22温度和湿度传感器与ESP32和ESP8266开发板一起使用 DHT模块 刷新MicroPython固件 要遵循本教程 您需要在ESP32或ESP8266板上安装Micro
  • 微信小程序开发入门——uni-app框架

    uni app Union Application 是一个基于Vue js的前端框架 开发规范借鉴了微信小程序 前端技能点 前后端分离 后端给接口和API文档 注重前端 用uni app框架 作用 创业团队可以更快的开发上线一个app 更容
  • 参数估计(Parameter Estimation):频率学派(最大似然估计MLE、最大后验估计MAP)与贝叶斯学派(贝叶斯估计BPE)

    基础 频率学派与贝叶斯学派 http www douban com group topic 16719644 http www zhihu com question 20587681 最大似然估计 Maximum likelihood es
  • 排序算法-----希尔排序

    目录 前言 希尔排序 shell 排序原理 大致思路 示例 代码实现 C语言 算法分析 时间复杂度 空间复杂度 稳定性 前言 前面我有一篇插入排序的详细的文章讲解 链接 排序算法 插入排序 图文详解 灰勒塔德的博客 CSDN博客 今天我们接
  • uniapp使用原生小程序插件

    本文主要讲述在uniapp上使用原生插件步骤 1 在使用插件之前 先登录微信公众平台 在微信公众平台 点击左下角设置 第三方设置 添加插件 输入插件名字 点击确定提交申请 申请通过后可以使用该插件 第一步 2 搜索你需要的插件点击添加 1
  • ConvenientBanner的基本使用

    前言 关于com bigkoo convenientbanner使用方法的步骤 1 compile com bigkoo convenientbanner 2 0 5 2 布局使用
  • Studio 更新的时候提示Connection failed (connect timed out). Please check network connection and try again.

    如下图 经百度后 明白要有以下操作 修改 ANDROID STUDIO HOME bin 下的 studio exe vmoptions 或者studio64 exe vmoptions 配置后追加如下 Djava net preferIP
  • Python 爬虫时间优化——设置不自动读取响应正文,避免自动读取大文件

    Python 爬虫优化 设置不自动读取响应正文 避免自动读取大文件 有的童鞋可能发现 自己的项目 自从按推荐 升级uillib库到urllib3之后 爬虫什么的 有时候会特别耗时 然而自己只不过是分析一下网页 不该如此 排查时我们往往发现