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. MySQL数据库:在命令提示符中使用mysql

    服务启动 在命令提示符中 启动mysql服务 net start mysql 停止mysql服务 net sotp mysql 通过命令行进入 mysql -u 用户名 -p 键入后会提示输入密码 如 ...

  2. SpringBoot高版本修改为低版本时测试类报错解决

    有时在使用idea通过Spring Initailizr创建项目时,默认只能创建最近的版本的SpringBoot项目. 这是如果想要换成版本,就可以在项目创建好了之后,在pom文件中直接将版本修改过来 ...

  3. git submodule git 子模块管理相关操作

    Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令: git submo ...

  4. acwing 55. 连续子数组的最大和

    地址  https://www.acwing.com/problem/content/50/ 输入一个 非空 整型数组,数组里的数可能为正,也可能为负. 数组中一个或连续的多个整数组成一个子数组. 求 ...

  5. echars line 底部图例强制不换行(滚动),修改图例样式

    { grid: { left: '5px', right: '10px', top: '10px', bottom: '40px', containLabel: true }, tooltip: { ...

  6. pytorch_08_RNN

    1.循环神经网络的提出是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络. 2.循环神经网络的基本结构特别简单,就是将网络 ...

  7. windows 安装使用jupyter及 基础配置

    jupyter 是什么Jupyter Notebooks 是一个交互式笔记本,支持运行 40 多种编程语言,它的本质是一个 开源的 Web 应用程序,我们可以将其用于创建和共享代码与文档,他可以支持实 ...

  8. CENTOS 7 内网网段在用IP地址检测Shell脚本优化版

    脚本内容 #!/bin/bash ############################################################################# # 用途: ...

  9. yolov3和ssd的区别

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/BlowfishKing/article/d ...

  10. 用友的SPS定义

    基于标准产品的支持服务(Standard Product Support,SPS).主要包括:更新升级(软件补丁更新与产品升级).问题解决(产品问题在线或热线解析).知识转移(用友到客户的知识传递). ...