【Python】urllib爬取动漫图片

首先附上需要爬取图片的网站,应该算是个冷门网站,够练手用的了,我的博客图片大部分来自于这里

二次元图片网站

在这里插入图片描述

筛选src里的数据

用par =r’<img src="[^"]+.jpg">'可以筛选出带有里面的内容

html='dasdas <img src="Hello.jpg">adasdassdasdasd<img src="Hello123.jpg">'
par =r'<img src="[^"]+\.jpg">'
html=re.findall(par,html)

筛选网页中src数据

切记:<img后的">“绝对不可加上,否则无法匹配,只需要写上前一部分即可
par =r’<img class=“pic-large” src=”(.*?)"

封装函数后的爬取单个网页图片集代码:

import urllib.request
import re                  #成功爬取当前页面所有图片地址def open_url(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',}response =urllib.request.Request(url = url ,headers = headers)webPage = urllib.request.urlopen(response)html=webPage.read()html=html.decode("utf-8")return htmldef get_img(html):par =r'<img class="pic-large" src="(.*?)"'html=re.findall(par,html)for each in html:print(each)response =urllib.request.urlopen(each)cat_img =response.read()with open('cat_200_300.jpg','wb') as f:f.write(cat_img)if __name__ == '__main__':url="http://www.win4000.com/wallpaper_detail_160820_3.html"get_img(open_url(url))

开始批量爬图

首先来分析下我们爬取的网站:爬取的二次元网站
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析它的url:
1、这里总共八张图片,第一张的地址后缀没有_01,第二张到第八章都有2-8的后缀,所以分两部分爬
2、爬首页
在这里插入图片描述
爬后面七张图片
在这里插入图片描述

下面贴出代码:

import urllib.request
import re                  #成功爬取当前页面所有图片地址def open_url(url):response =urllib.request.urlopen(url)html=response.read()html=html.decode("utf-8")return htmldef get_img(html):par =r'<img class="pic-large" src="(.*?)"'html=re.findall(par,html)for each in html:print(each)filename = each.split("/")[-1]urllib.request.urlretrieve(each,filename,None)if __name__ == '__main__':url="http://www.win4000.com/wallpaper_detail_160877.html"get_img(open_url(url))for num in range(2,9):url="http://www.win4000.com/wallpaper_detail_160877_%d"%(num)html=".html"text=url+htmlprint(text)get_img(open_url(text))

可一次性爬取八张图,后续只要更换该网址的其他界面即可
在这里插入图片描述
全部是1920*1080的高清照片
(以前爬过百度搜狗图片,质量太差)

所以你说我博客上的动漫图片哪来的,这就是答案

用open的方法可以在指定文件夹(同等目录)放入相应文件

f=open("hello/tello.jpg","w")
constant="i love you"
f.write(constant)
f.close()
#可以写入任何硬盘当中

终极封装完成后的代码

(你只需要输入它的首页地址即可)

import urllib.request
import re                  #成功爬取当前页面所有图片地址def open_url(url):response =urllib.request.urlopen(url)html=response.read()html=html.decode("utf-8")return htmldef get_img(html):par =r'<img class="pic-large" src="(.*?)"'html=re.findall(par,html)for each in html:print(each)filename = each.split("/")[-1]urllib.request.urlretrieve(each,filename,None)if __name__ == '__main__':while(1):word=input(("请输入所要图片的首页网址:"))url1=word[:-5]url2=".html"url=url1+url2get_img(open_url(url))for num in range(2,9):url=url1+"_"+str(num)html=".html"text=url+htmlprint(text)get_img(open_url(text))

这是我第一次完完全全封装好代码,自己研究某个网站的一些属性,到一点点琢磨,终于把那种本来需要机械重复无数次的操作,变为高效又简洁的代码。尽管代码还不够强健
但是通过自己一点一点完善推敲出来的感觉就是不一样

在这里插入图片描述
加入死循环后只需重复添加首页地址即可,看中那个首页就直接下载下来

在这里插入图片描述
完美,改天换别的网站继续爬!!!!加油
爬图一时爽,一直爬图一直爽!!!!

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

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

相关文章

P4137-Rmq Problem/mex【莫队,分块】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP4137 题目大意 求区间mex。 解题思路 开始发现aia_iai​很大&#xff0c;开不了桶。但是转念一想&#xff0c;如果ans>n1ans>n1ans>n1仅当前n1个都有&#xff0c;可是最多只有n个&#xff…

【Python】字符串和变量拼接的写法

我的需求是改变url地址的后缀&#xff0c;其他不改&#xff0c;所以直接for循环&#xff0c;变换数字就行 也就是 字符串变量字符串 想着改变后缀就能批量爬图。但是原本的想法是错误的 for num in range(2,8):url"http://www.win4000.com/wallpaper_detail_160877_"…

Java面试,如何在短时间内做突击

转载自 Java面试&#xff0c;如何在短时间内做突击 面试技术文 Java岗 面试考点精讲&#xff08;基础篇01期&#xff09; Java岗 面试考点精讲&#xff08;基础篇02期&#xff09; Java岗 面试考点精讲&#xff08;网络篇03期&#xff09; Java 面试中遇到的坑 Java面试中…

【学校作业】学生数据打印

数据结构课程布置了一门c语言的结构体作业 要求&#xff1a; 五个学生&#xff0c;数据包括学号&#xff0c;姓名&#xff0c;3门课的成绩&#xff0c;从键盘输入5个学生的数据。打印出3门课总平均成绩&#xff0c;以及最高分 强迫症患者表示打印出的数据必须美观&#xff0c; …

P4879-ycz的妹子【分块】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP4879 题目大意 有若干种操作 Cxy:ax−yC\ x\ y:a_x-yC x y:ax​−yIxy:I\ x\ y:I x y:加一个(原本有的话就改变)axya_xyax​yQ:Q:Q:询问所以数的和Dx:D\ x:D x:删除第xxx个(有的才算)数。 解题思路 …

Entity Framework Core 2.0 使用入门

一.前言 Entity Framework&#xff08;后面简称EF&#xff09;作为微软家的ORM&#xff0c;自然而然从.NET Framework延续到了.NET Core。以前我也嫌弃EF太重而不去使用它&#xff0c;但是EF Core&#xff08;Entity Framework Core&#xff09;已经做了很多性能优化&#xff0…

JavaFX中WebView的java与JS代码互相调用

java代码 package main;import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.w…

【Python】有效资源爬取并集

由于爬虫代码都不多&#xff0c; 所以我决定在这篇博文上更新所有我觉得比较实用的python代码 方便以后自己调用 环境:python3.7 百度图片爬虫 二次元图片爬取 唐三小说爬取 文件格式命名 百度图片爬虫 百度图片网站 import re import requests from urllib import err…

[编程入门]带参数宏定义练习:定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。

#include<bits/stdc.h> #define fun(a,b) ta;ab;bt; using namespace std;int main() {int a,b,t;cin>>a>>b;fun(a,b);cout<<a<<" "<<b;return 0; }

Jexus~docker与它产生了暖味

前段时间写了很多docker for .net core的文章&#xff0c;用来快速部署微服务相当给力&#xff0c;而尝到了香头的我们希望把.net frameworks的程序也使用docker来部署一下&#xff0c;那么接下来我就结果一下&#xff0c;在linux,docker上运行和部署.net frameworks应用程序的…

P3870-[TJOI2009]开关【分块】

正题 解题思路:https://www.luogu.org/recordnew/lists?uid52918&pidP3870 题目大意 n个灯&#xff0c;操作[0,l,r][0,l,r][0,l,r]表示l∼rl\sim rl∼r的灯取反&#xff0c;操作[1,l,r][1,l,r][1,l,r]表示询问l∼rl\sim rl∼r之间有多少灯亮着。 解题思路 分块&#xf…

Linux运维常用检查网络工具

一、Ping ping可以检查网络是否连通&#xff0c;可以很好地帮助我们分析和判定网络故障。 ping ip 二、Telnet telnet通常用来查看某个端口是否可访问。 telnet ip port 三、Curl curl是一个利用URL语法在命令行下工作的文件传输工具&#xff0c;1997年首次发行。它支持…

ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明

一.ABP的简单介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点&#xff0c;它旨在成为一个通用的WEB应用程序框架和项目模板。 ASP.NET Boilerplate 基于DDD的经典分层架构思想…

[编程入门]宏定义的练习:输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。

#include<bits/stdc.h> #define N a%b; using namespace std;int main() {int a,b;cin>>a>>b;cout<<N;return 0; }

jzoj3518-进化序列(evolve)【位运算】

正题 题目大意 序列aaa 求有多少个数(x,y)(x,y)(x,y)对满足: x<yx<yx<y和axorax1orax2...oray<ma_x\ or\ a_{x1}\ or\ a_{x2}...or\ a_y<max​ or ax1​ or ax2​...or ay​<m 解题思路 首先对于每个y&#xff0c;x满足单调性。 如果(x,y)(x,y)(x,y)可以那…

【Python】Scrapy的安装与使用

scrapy的安装 不得姐网站 直接用命令 pip install scrapy 网络可能较慢&#xff0c;等等就好 另外windows环境下你还需要安装win32 我之前就是因为没有安装这个库&#xff0c;白忙活了一天&#xff0c;一直都是报错状态 pip install pypiwin32 scrapy的使用 cd到卓面或者其他…

[译]ASP.NET Core 2.0 带初始参数的中间件

问题 如何在ASP.NET Core 2.0向中间件传入初始参数&#xff1f; 答案 在一个空项目中&#xff0c;创建一个POCO&#xff08;Plain Old CLR Object&#xff09;来保存中间件所需的参数&#xff1a; public class GreetingOptions { public string GreetAt { get; set; } …

【LSB】图片隐写

今天接触到个比较好玩的项目 用的是纯htmljs可以将图片里附着文本或图片 经过网页加工就可以将一些隐秘的信息传入到图片里面去了。 这个功能类似于用一种笔在纸上写字&#xff0c;这种字在正常情况下看不出来&#xff0c;而经过泼水之后就会有字的显现。 这种隐写功能也具…

[编程入门]宏定义之闰年判断:给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y) (读者设计

#include<bits/stdc.h> #define LEAP_YEAR(y) ((y%40&&y%100!0)||(y%4000)?"L":"N") using namespace std;int main() {int year;cin>>year;cout<<LEAP_YEAR(year);return 0; }

jzoj5223-B【矩阵乘法】

正题 题目大意 3∗33*33∗3的矩阵上每个格子都有机器人&#xff0c;每次可以向相邻格子移动或不动(一个格子上可以有多个机器人)&#xff0c;求移动nnn次后每个格子上都有机器人的移动方案数。 解题思路 用矩阵乘法计算出每个格子的机器人移动到每个格子的方案总数。 在枚举最…