1. Socket下载一张图片
  2. Socket下载一页图片

Socket下载一张图片

在百度搜索头像,挑一张

复制图片的路径打开,并保存这个url

把这个url的域名和路径分开

首先导入socket模块

第一步:创建套接字客户端

第二步:发起连接,connect()参数填域名和端口,http协议端口默认为80

第三步:构造报文

报文里的URL就是一开始从图片地址将域名和路径分出来的,然后将报文写在一行

第四步:发送HTTP请求

此时运行会报错

因为Socket 发送和接收的都是bytes的数据,需要字节对象,现在的还是字符串,通过encode()编码

第五步:循环接收响应的内容

因为不知道响应的内容具体有多少,每次从管道中取出1024字节,取完为止,然后可以打印出res,看看接收到的数据

第六步:通过正则匹配图片的内容(去掉响应头)

这个也得用bytes的数据去匹配,匹配完返回的类型是一个列表

最后一步:把图片写入到本地

图片的内容本身就是二进制,就不用decode()解码了

Socket下载一页图片

依然选择的是头像这个网页,这次不用选择图片,直接把这一页的全给下载到本地

复制这个网页的路径,并保存这个URL

第一步:把网页的url赋值给一个变量保存,为方便后续识别,可以在注释里把域名和路径区分开

第二步:写一个方法,方便多次使用(跟上面下载一张图片的步骤一样)

第三步:构造报文(报文里的路径是刚才在注释里为方便识别而区分开的),将域名和报文传入这个方法,打印显示接收到的内容,返回的是bytes类型,打印的时候需要decode()

这时,你会发现,这响应的内容就是网页的源代码

第四步:这时,需要到网页里去寻找出图片的url,知道url才知道下载的东西在哪里

复制URL到网页的源代码中搜索,找到三个URL

每个url前都有一个不同的参数,需要下载一页图片,就要知道所有图片的url的共同点,把这三个参数分别去搜索了一下,发现,都有30次的出现,这就能确定是所有图片url都带有的了

第五步:找到url的特点后,我们可以通过正则在返回的源码中匹配出所有图片的url

最后一步:通过for迭代,依次对列表里的url进行下载

这时,每张图片的url的已经出来了,接下来就是跟上面下载一张图片一样的操作了

现在运行就搞定了

使用Socket下载图片的更多相关文章

  1. java假设模拟请求重新启动路由器(网络爬虫经常使用),还有java怎样下载图片

    我们假设在公司或家里使用网络爬虫去抓取自己索要的一些数据的时候,经常对方的站点有defence机制,会给你的http请求返回500错误,仅仅要是同样IP就请求不到数据,这时候我们仅仅能去重新启动路由器 ...

  2. python下载图片超时的调查

    在使用python3下载图片时, 常用的方法有urlretrieve和requests两种, 不管哪种方法在网速极慢的情况下, 会出现图片下载卡住现象.那如何解决呢? 小编根据网上提供的资料测试了几种 ...

  3. C++根据图片url下载图片

    需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...

  4. .net 已知图片的网络路径,通过浏览器下载图片

    没什么技术含量,主要留给自己查找方便: 如题,知道图片的完整网络路径的情况下,在浏览器中下载图片的实现: 下面这个方法实现的是把图片读取为byte数组: private byte[] GetImage ...

  5. (TODO:)下载图片,报错:warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available.

    想使用NSInvocationOperation下载图片,然而并没有下载下来, NSData为nil, 还有报错:(打断点就报错) warning: could not load any Object ...

  6. Android 本地/网路下载图片实现放大缩小

     Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...

  7. 利用node来下载图片到本地

      本文是针对于知道图片地址的下载图片方法. 同时也是我的处男作(额,怪怪的〜);不要在意这些细节. 最近在弄项目迁移,需要把http的链接全换成https的:以前的cms不支持http的协议,然后就 ...

  8. SDWebImage下载图片有时候无法成功显示出来

    之前用下面的方法现在图片,有时候会出现图片没有下载成功显示: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)p ...

  9. 根据url地址单个或批量下载图片

    我们在java开发的时候会遇到通过url地址下载图片的情况.方便起见,我把通过url地址下载图片封装了tool工具类,方便以后使用 1.根据如:http://abc.com/hotels/a.jpg  ...

随机推荐

  1. 甲方安全之安卓App第三方加固对比

    前段时间公司要给 Android 应用进行加固,由笔者来选一家加固产品.然后发现,加固产品何其之多,且鱼龙混杂.各种问题也是层出不穷,比如,有些加固时间非常久.有些加固会失败.有些运行会崩溃等等问题. ...

  2. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 1. 获取用 ...

  3. 流程控制语句if基本概述

    目录 1. 流程控制语句if基本概述 2. 流程控制语句if文件比较 判断文件是否存在,返回方式 使用变量的方法进行判断 请输入你要备份的数据库名称: wordpress 请输入你要备份的数据库密码: ...

  4. ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/itsdangerous' Consider using the `--user` option or check the permissions

    近期练习flask写个blog, 安装flask扩展时 pip install Flask-WTF 报ERROR: Could not install packages due to an Envir ...

  5. Transportable tablespace on standby (Doc ID 788176.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 10.2.0.4 [Release 10.2]Oracle ...

  6. acwing 471. 棋盘 解题记录

    题解地址  https://www.acwing.com/problem/content/description/473/ 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的. 你现 ...

  7. LeetCode 1245 树的直径

    地址 https://leetcode-cn.com/contest/biweekly-contest-12/problems/tree-diameter/ 给你这棵「无向树」,请你测算并返回它的「直 ...

  8. WPF DataGrid 绑定数据及时更新的处理

    原文:WPF DataGrid 绑定数据及时更新的处理 默认情况下datagrid 绑定数据源后,在界面编辑某一列后,数据不会及时更新到内存对象中.如在同一行上有一个命令对来获取 当前选中行(内存对象 ...

  9. typescript里一些有趣的点

    联合类型 在原生的JS里,null和undefined经常会导致BUG的产生, 在ts里,你又想用null,又担心出错的时候 你可以考虑用联合类型,当某值可能为 number或null,你可以声明它的 ...

  10. 用OC基于链表实现链队列

    一.简言 在前面已经用C++介绍过链队列的基本算法,可以去回顾一下https://www.cnblogs.com/XYQ-208910/p/11692065.html.少说多做,还是上手撸代码实践一下 ...