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. ENDIAN的由来及BIG-EDIAN 和LITTLE-ENDIAN(转)

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

  2. react-native自定义Modal模态框|仿ios、微信弹窗RN版

    前序 纵观每个优质项目,无论web端还是native原生应用开发,弹窗都是不可忽视的一环,能很大程度上直接决定用户体验.如:微信.支付宝.ios都有很成熟的一套弹窗UI展示场景. 最近一直沉迷在rea ...

  3. Android 图表控件的使用

    一个简单不复杂的图表控件ChartLibs,目前仅仅提供三种图表控件:饼图.条形图和线性图.其展示效果 如下: 使用方法很简单,直接通过gradle导入ChartLibs依赖就可以,在build.gr ...

  4. Saltstack_使用指南18_API

    1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...

  5. 循环语句for基本概述

    循环语句for基本概述 01. for循环基础语法 for 变量名 in [ 取值列表 ]do 循环体done 02. for循环基本使用示例 #取值列表有多种取值方式,可以直接读取in后面的值,默认 ...

  6. Python 实现 Hangman 小游戏

    Hangman--游戏简介--> 百度百科 打印Hangman def printHangman(N): # 第一行 print("\t____") # 第二行 print( ...

  7. centos7.6 创建磁盘格式化

    fdisk /dev/vdb mkfs.ext4 /dev/vdb echo '/dev/vdb /sdata ext4 defaults 0 0' >> /etc/fstab mount ...

  8. SPA项目之CRUD+表单验证

    1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...

  9. 央行辟谣未发行“DC/EP”和“DCEP” 法定数字货币仍在测试阶段

    http://www.sohu.com/a/354709423_100157595 近期,中国央行再度就法定数字货币发布公告,指出目前系统仍处于研究测试过程中,市场上交易“DC/EP”或“DCEP”均 ...

  10. 构建LVS负载均衡集群——NAT模式(最简单方式)

    一.装备一台lvs调度器主机要求两个网卡一个为内部局域网ip,一个为公网ip #IP地址设置过程不再重复 [root@localhost ~]# ip a | grep eth0 #内网ip : et ...