python自动保存图片_Python学习笔记:利用爬虫自动保存图片

兴趣才是第一生产驱动力。

Part 1

起先,源于对某些网站图片浏览只能一张一张的翻页,心生不满。某夜,冒出一个想法,为什么我不能利用爬虫技术把想看的图片给爬下来,然后在本地看个够。

由此经过一番初尝试发现,MD一个破图片网站还做什么反爬技术,还做得这么好,害我搞了一个晚上都搞不定,百思不得其解。

此事暂搁置一段落。

(附图片网站:妹子图)

Part 2

今日,又发现另一网站,遂再次进行测试一番,美名曰:练习技术。

此篇仅记录如何保存图片,而不是涉及网页爬取、正则解析图片链接识别等,后续再做补充。

第一次尝试,直接请求图片,保存

import urllib.request

import time

for i in range(1,6): # 循环次数根据图片数确定

try:

f = open('C:\\Users\\Hider\\Desktop\\test\\de42b_0'+ str(i) + '.jpg', 'wb')

url = 'https://media.kymari.vip/images/2019/10/11/de42b_00' + str(i) + '.jpg'

f.write((urllib.request.urlopen(url)).read())

print(url)

f.close()

except Exception as e:

print(str(i) +" error")

i += 1

time.sleep(5) # 休眠5秒

print("All Done!")

发现能爬取,不过试过几次,都是爬取了差不多10张图就爬不动了。看来还是有反爬措施的,添加了time.sleep(5)每次休眠几秒钟,再请求,发现还是不行,继续改进。

第二次尝试,通过添加headers伪装浏览器进行请求

import time

import requests

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

for i in range(1,6):

try:

url = 'https://media.kymari.vip/images/2019/08/27/a5359_00' + str(i) + '.jpg'

r = requests.get(url)

with open('C:\\Users\\Hider\\Desktop\\test\\a5359_00'+ str(i) + '.jpg', 'wb') as f:

f.write(r.content)

print(url)

f.close()

except Exception as e:

print(str(i) +" error")

i += 1

time.sleep(10)

print("All Done!")

终于可以正常的把一整个网页的图片给保存下来了,done!

哭笑不得的是,网站是开发者可能也是技术一般,没有做好反爬防护措施,针对付费VIP才能观看的部分网页图片,给出了预览图,因此通过发现图片命名规律,直接就把后续付费的部分图片给爬下来,大肆观看。

(附图片网站:素人吧)

Part 3

此文只是针对某个具体网页,图片链接已经通过浏览器F12人工获取,判断规则,再进行一个循环保存而已,实际上,并不算一个“真正的爬虫”,后续再通过其他网站进行练练手,完整的把整个爬取流程给学习完整。

发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers、data等信息,然后等待服务器响应。这个请求的过程就像我们打开浏览器,在浏览器地址栏输入网址:www.baidu.com,然后点击回车。这个过程其实就相当于浏览器作为一个浏览的客户端,向服务器端发送了 一次请求。

获取响应内容:如果服务器能正常响应,我们会得到一个Response,Response的内容便是所要获取的内容,类型可能有HTML、Json字符串,二进制数据(图片,视频等)等类型。这个过程就是服务器接收客户端的请求,进过解析发送给浏览器的网页HTML文件。

解析内容:得到的内容可能是HTML,可以使用正则表达式,网页解析库进行解析。也可能是Json,可以直接转为Json对象解析。可能是二进制数据,可以做保存或者进一步处理。这一步相当于浏览器把服务器端的文件获取到本地,再进行解释并且展现出来。

保存数据:保存的方式可以是把数据存为文本,也可以把数据保存到数据库,或者保存为特定的jpg,mp4 等格式的文件。这就相当于我们在浏览网页时,下载了网页上的图片或者视频。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-3 交换变量(算法竞赛入门经典)

交换变量在这里提出了三种方法&#xff0c;代码如下&#xff1a; 我这里直接设计了三个函数用以验证: #include<iostream> #include<bits/stdc.h> using namespace std;void swap1(int a,int b); void swap2(int a,int b); void swap3(int a,int b);int main() {i…

145. Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes values. For example:Given binary tree [1,null,2,3], 1\2/3思路&#xff1a; 借助于一个栈&#xff0c;依次将根节点的右子节点和左子节点压入栈中。如果一个节点为叶子节点&#xff0c;或者前一个出栈的元…

python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算

pandas提供了一个灵活高效的groupby功能&#xff0c;它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计&#xff0c;如计数、平均值、标准差&#xff0c;或用户自定义函数。对…

计算机网络原理关于实验中几个指令使用的复习——网络层

1.>&#xff1a;普通用户模式。 2.en(enable):特权用户模式 3.conf t&#xff08;configure terminal):进入全局配置模式 4.interface fa0/0:接口配置模式 5.exit:退出返回到上一层。 1.ip route:显示所有路由 2.全局配置模式下: ip route 目的网络 掩码 下一跳的IP 3. arp…

46-单元测试(1)

单元测试&#xff1a;对一个函数&#xff0c;类&#xff0c;模块进行测试&#xff1a;TDD(测试驱动开发) #在同一个目录下建两个py文件&#xff1a;mydict.py和Testmydict.py#mydict.py class Dict(dict):def __init__(self, **kw):super().__init__(**kw)def __getattr__(self…

1-4 鸡兔同笼(算法竞赛经典入门)

这个属于初级阶段传递给初学者的一个思想&#xff0c;那就是计算机是不可以计算方程式的&#xff0c;需要你具体的告诉它每一步需要做什么。 源码如下: #include<iostream> #include<bits/stdc.h> using namespace std; int main() {int m,n;double x,y;cin>&…

计算机网络各层协议

应用层(典型设备:应用程序, 如FTP, SMTP , HTTP) HTTP (Hypertext Transfer Protocol )超文本传输协议 <端口号 80>, 面向事务的应用层协议。 DNS (Domain Name System )域名解析<端口号53> FTP (File Transfer Protocol )文件传输协议<端口号21>减少或消除不…

个人博客网页设计_博客个人网页制作网页设计-1

CSS3仿Flash动画个人博客模板是一款横向全屏切换的个人博客模板。

1-5 三整数排序(算法竞赛入门经典)

书上关于三整数排序的这一问题&#xff0c;完全是为了让初学者去思考分支情况的&#xff0c;并且也要去考虑三个数其中相等的情况。 其实最后一种思想正是后面要学习的排序算法中的选择排序的一种体现。 源码如下: #include<iostream> #include<bits/stdc.h> usin…

uniapp滑动切换tab标签_Web前端,Tab切换,缓存,页面处理的几种方式

前言相信tab切换对于大家来说都不算陌生&#xff0c;后台管理系统中多会用到。如果不知道的话&#xff0c;可以看一下浏览器上方的标签页切换&#xff0c;大概效果就是这样。1.如何切换使用动态组件,相信大家都能看懂(部分代码省略)//通过点击就可以实现两个组件来回切换 切换v…

20165203 2017-2018-2 《Java程序设计》第一周学习总结

20165203 2017-2018-2《Java程序设计》第一周学习总结 教材学习内容总结 &#xff08;一&#xff09;Java的地位 Java是面向对象编程&#xff0c;并涉及网络、多线程等重要的基础知识&#xff0c;是一门很好的面向对象的语言。 &#xff08;二&#xff09;Java的特点 简单 面向…

C语言中printf输出特殊字符(“%d“或者“\n“)

在C语言中&#xff0c;相信很多人尝试过进行“%”的输出&#xff0c;常规的 printf("%d\n"); 肯定是行不通的&#xff0c;这里需要注意的是在c语言中对“%”和“\”的输出是可以的&#xff0c;但是输出格式不能直接进行输出&#xff0c;编译器在编译的时候会把"…

16-1平衡树源代码

本例子分为3个文件。 类声明头文件 hAVL.h #ifndef AVLTREE_H_INCLUDED #define AVLTREE_H_INCLUDED//AVL树数据结构定义 typedef int ElementType;//AVL数节点包含数据类型//树节点 typedef struct AVLNode{ElementType element;//节点包含的数据元素AVLNode *left;//节点左子…

此处不允许使用分组函数_Excel中使用Vlookup函数实现数据分组

Vlookup匹配函数&#xff1a;在表格的首列查找指定的数据&#xff0c;并返回指定的数据所在行中的指定列处的单元格内容。该函数的语法规则如下&#xff1a;VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)draft-node"block" data-draft-type"ta…

算法入门经典习题第一章

习题1-1 平均数(average) #include<iostream> #include<bits/stdc.h> using namespace std; int main() {int a,b,c;double s;cin>>a>>b>>c;s(abc)/3.0;printf("%.3f\n",s); }注意整数在运算中和实数的转换即可。 习题1-2 温度 #in…

C#细说多线程(下)

本文主要从线程的基础用法&#xff0c;CLR线程池当中工作者线程与I/O线程的开发&#xff0c;并行操作PLINQ等多个方面介绍多线程的开发。 其中委托的BeginInvoke方法以及回调函数最为常用。而 I/O线程可能容易遭到大家的忽略&#xff0c;其实在开发多线程系统&#xff0c;更应该…

python apscheduler 脚本 动态_用apscheduler写python定时脚本

apscheduler 官方文档&#xff1a;http://apscheduler.readthedocs.io/en/latest/写一个后台定时任务&#xff0c;一般2个选择&#xff0c;一个是apscheduler&#xff0c;一个celery&#xff0c;apscheduler比较直观简单。安装&#xff1a;pip install apscheduler简单例子&…

找零问题的几种解决方式(递推)(持续更新)

初学算法&#xff0c;找零问题算的上是一个比较经典的问题 老师上课讲的时候潇潇洒洒&#xff0c;以为已经是拿下了&#xff0c;课下唯唯诺诺&#xff0c;一看&#xff0c;发现思路没了&#xff0c;真是出来混&#xff0c;总是要还的呀。 源码: #include<iostream> #in…

Atcoder Contest069F:Flag

题目&#xff1a;https://arc069.contest.atcoder.jp/tasks/arc069_d 题意就是让你在n对数字每一对都选一个数使得任意两个数做差的绝对值最小值最大。 关系显然是一个2-sat&#xff0c;然后我们发现二份答案如果差值为x那么a-x1到ax-1是绝对不能选的&#xff0c; 也就是选完以…

anaconda中的python如何进行关联分析_Anaconda、Miniconda、Conda、pip的相互关系

Anaconda、Miniconda、Conda、pip的相互关系。如果你想要跳过这篇文章&#xff0c;并得到讨论的要点&#xff0c;你可以阅读每个标题以及下面的摘要。认为#1&#xff1a;Conda是一个发行版&#xff0c;不是一个软件包管理器现实&#xff1a;Conda是一个包管理器;Anaconda是一个…