python爬取网站的图片

python爬取网站的图片

本次爬取图片所需要用到的库:Requests库,BeautifulSoup库,正则表达式,os库。

思路:先爬一张图片,再爬一个网站的图片

先爬一张图片:

首先要得到这张图片的地址,可以直接找到图片然后复制地址,还可以在网站中右击然后检查(谷歌浏览器快捷键是F12)中找到,这里用后种方式方便后面的理解,如图:

在这里插入图片描述

然后就可以把地址复制到代码中去,代码如下:

import requests
import os								#这是一个和路径相关的库
#图片所在的网址,jpg,png等格式
url="https://files.yande.re/image/f312298021cf93355d185e3e28e5b52c/yande.re%20535947%20berserker_of_black_%28fate_apocrypha%29%20breast_hold%20cleavage%20dress%20fate_apocrypha%20fate_grand_order%20fate_stay_night%20horns%20samsafe%20wedding_dress.jpg"root="F://pic//"  					 	#需要存储的根目录
path=root+url.split('/')[-1]  			#需要存储的路径以及文件名,若要自定义文件名则只需将改为path=root+"文件名.jpgtry:									#处理异常用if not os.path.exists(root):  		#判断根目录是否存在,不存在就创建os.mkdir(root)if not os.path.exists(path):		#查看文件(文件路径)是否存在r=requests.get(url)				#浏览器向服务器发出请求print(r.status_code)			#查看状态码,结果为200则获取成功 with open(path,'wb') as f:f.write(r.content)			#把获取到的内容以二进制形式写入文件(图片等文件都是二进制存储的)f.close()					#写完后好像with自己会关,这行代码可要可不要print("文件保存成功")else:print("文件已存在")
except:print("爬取失败")

代码的详细注释都在上面,执行之后的图片如下:
在这里插入图片描述
在这里插入图片描述
这张图片有2.11M的大小花了71秒,接下来,爬取一个网站的图片。

思路:先爬取网站所有图片的网址,再利用循环像刚刚那样就可以爬整个网站的图片了。代码如下:
#图片等文件爬取全代码
import requests
import os
import re
from bs4 import BeautifulSouphtml="https://yande.re/post?tags=fate%2Fstay_night"  	
res=requests.get(html)					#有了网站地址后向服务器发出请求
bs=BeautifulSoup(res.text,'lxml')		#运用解析库解析获取的内容#通过正则表达式和beautifulsoup的find_all函数获取所有图片的地址,并且以列表形式返回给images
images=bs.find_all("a",{"class":"directlink largeimg","href":re.compile(r"\.jpg")})for image in images:					#在列表中循环url=image["href"]					root="F://pic//"   					#需要存储的根目录path=root+url.split('/')[-1]  		#需要存储的路径以及文件名,若要自定义文件名则只需将改为path=root+"文件名.jpg"try:if not os.path.exists(root):  	#查看根目录是否存在,不存在就创建os.mkdir(root)if not os.path.exists(path):	#查看文件(文件路径)是否存在r=requests.get(url)			#浏览器向服务器发出请求		with open(path,'wb') as f:f.write(r.content)		#把获取到的内容以二进制形式写入文件(图片等文件都是二进制存储的)f.close()				#写完后好像with自己会关,这行代码可要可不要print("文件保存成功")		else:print("文件已存在")except:print("爬取失败")
然后执行就可以了,在写博客的时候发现存在一个问题,整个代码向服务器发送了两次请求,一次请求网站地址的内容,一次请求图片网址的内容,降低了运行速度,不知道其他算法写的代码需不需要请求两次,刚开始学爬虫,不懂的还有很多,有意见或者建议请在评论里发言。下面更新后的完整代码,增加了对付反爬虫机制以及计数的代码。
#图片等文件爬取全代码
import requests
import os
import re
from bs4 import BeautifulSoup
import random
import timei=0	#用来计数
#代理ip,针对反爬虫机制
proxylist=[{"http":"http://182.88.122.115:9797"},{"http":"http://183.49.87.142:9000"},{"http":"http://125.32.81.197:8080"}
]
proxy=random.choice(proxylist)
#请求头,针对反爬虫机制
agent1="Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"  #谷歌
agent2="Mozilla/5.0 (Windows NT 6.1; WOW64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"	#360
agent3="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;\WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5\.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; \.NET4.0E; QQBrowser/7.0.3698.400)"											#qq
agent4="Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 \
(KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0"		#搜狗
agent5="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36"	#UC
list1=[agent1,agent2,agent3,agent4,agent5]for x in range(0,10):agent=random.choice(list1)  	#随机选一个ip地址header={"User-Agent":agent}		#随机选一个user-agenthtml="https://anime-pictures.net/pictures/view_posts/"+str(x)+"?search_tag=katou%20megumi&order_by=date&ldate=0&lang=en" res=requests.get(html,proxies=proxy,headers=header)time.sleep(1)					#有了网站地址后向服务器发出请求bs=BeautifulSoup(res.text,'lxml')		#运用解析库解析获取的内容#通过正则表达式和beautifulsoup的find_all函数获取所有图片的地址,并且以列表形式返回给imagesimages=bs.find_all("img",{"src":re.compile(r"\.jpg")})for image in images:					#在列表中循环url="http:"+image["src"]					root="F://路人女主1//"   					#需要存储的根目录path=root+url.split('/')[-1]  		#需要存储的路径以及文件名,若要自定义文件名则只需将改为path=root+"文件名.jpg"try:if not os.path.exists(root):  	#查看根目录是否存在,不存在就创建os.mkdir(root)if not os.path.exists(path):	#查看文件(文件路径)是否存在r=requests.get(url,proxies=proxy,headers=header)			#浏览器向服务器发出请求time.sleep(1)	with open(path,'wb') as f:f.write(r.content)		#把获取到的内容以二进制形式写入文件(图片等文件都是二进制存储的)f.close()				#写完后好像with自己会关,这行代码可要可不要print("文件保存成功"+str(i))	i=i+1	else:print("文件已存在"+str(i))i=i+1except:print("爬取失败"+str(i))i=i+1
print(i)

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

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

相关文章

用户登陆_华为路由器AAA用户密码登陆你了解吗?

AAA Authentication(认证)、Authorization(授权)、Accounting()它提供了认证、授权、计费三种安全功能,可以验证用户帐户是否合法,授权用户可以访问的服务,并记录用户使用网络资源的…

word域变成正常文本_【Word小技巧】不学会后悔哦~

工作中使用Word早已成了习惯,因此,今天小编将为大家分享几个实用的的Word小技巧。重叠字快速录入文字录入是word最基本操作,过程中我们难免要输入重叠字,例如:热热闹闹,卿卿我我等……你知道如何快速录入吗…

sql server 2008 年累计数_Windows Server 2008 和 SQL Server 2008将终止支持 迁移至Azure 微软提供3年免费技术支持...

点击上方蓝色字关注我们~迁移至 Azure 并利用免费扩展安全更新。了解有关支持终止建议的更多信息,请使用浏览器访问:https://www.microsoft.com/zh-cn/sql-server/sql-server-2008.对您意味着什么1 2017年基于风险的安全报告; 思科 2017 年度网络安全报告…

旧版Requests库

requests库基本使用Requests解析库方法response对象response对象的属性**r.encoding**属性与**r.apparent_encoding**属性的区别requests库的异常举例Requests解析库 方法 最常用的两个方法: request.get() request.post() 作用:都是从服务器获取网页信息 区别&…

夸克浏览器怎么安装脚本_iOS 第一浏览器发布安卓版,除了真香我还能说什么...

如果不算 Safari 的话,iOS 平台公认最好的浏览器是 Alook。无推送无新闻无广告、日常售价 12 元、工具类排行第三、7.8 万个评分足以证明其优秀。以至于很多双持或对 Alook 有所了解的用户都希望 Alook 能推出安卓端。现在安卓端真的来了。(安卓端免费)假如这个时候…

Windows 10 笔记本如何使用外接显示器

文章目录如何连接外接显示屏如何设置显示模式如何设置不同显示屏各自的分辨率如何设置主显示器通过显卡来设置显示器如何连接外接显示屏 VGA 线或者 HDMI 线连接好电脑和显示器,以 HDMI 线为例简单讲下吧。 显示器可能会有多个 HDMI 接口,假设你插入 H…

蓝牙信号强度检测app_基于蓝牙技术的智能插座方案

有这样一句话“科技时代,生活轻快”。随着社会现代化程度越来越高,科技的应用为人们的生活带来便捷,大大提高了工作效率。纵观市场上“智能家居”产品很多,功能各异,各有千秋,但是针对家电控制的智能插座还…

图片清晰度,分辨率,像素总结

像素 像素是一个个小方块,是构成位图的基本单位。将图片放大即可看出来,如图: 分辨率 显示分辨率是指像素的总数量,如上图的22001400,也就是宽有2200个像素,高有1400个像素。 图像分辨率是指每英寸所包含…

apache isis_使用Apache Isis快速进行SEMAT应用程序开发

apache isisTL; DR这是关于一个帖子会谈SEMAT宠物项目我创建使用Apache伊希斯和部署到OpenShift在线这里http://semat.ofbizian.com Apache Isis 作为主要在后端系统上工作的Java开发人员,我讨厌创建用户界面和处理Java脚本。 幸运的是,有一些Java项目&…

MacBook外接显示器及相关设置详解(分屏/多屏)

文章目录一、连接显示器和电脑二、打开显示器设置界面三、调整显示器图标位置四、设置主显示器五、移动 Dock六、镜像模式七、合盖模式八、扩展模式九、设置外接显示器竖屏显示十、外接显示器后,如何调出更多分辨率十一、关于程序坞显示的问题一、连接显示器和电脑 …

ibm liberty_使用Eclipse和Open Liberty的Java EE 8上的Java 9

ibm liberty几周前,我写了一篇文章,题目是哪个IDE和服务器支持Java EE 8和Java9 ,着眼于Java 9和Java EE 8之间的当前状态。您可以期望事情发展很快,现在我们有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5…

关键词分词工具_快图制作工具 | 如何制作词云图?

点击蓝字关注我们如何制作词云图?首先,我们需要对“词云”有个简单的概念。“词云”这个概念最先由美国西北大学新闻学副教授、新媒体专业主任里奇戈登(Rich Gordon)提出。“词云”(别名:文字云,外文名:wordle)即由词汇…

openhub_OpenHub框架–下一个有趣的功能

openhub这是有关OpenHub框架系列的第三篇文章-第一篇介绍OpenHub框架 ,第二篇介绍异步消息传递模型 。 该系列的最后一篇文章将更详细地介绍其他一些有趣的功能,并说明为什么OpenHub可以成为您的集成项目的理想选择的原因。 节流 节流是一种功能&#…

售票系统的组件图和部署图_识读配电箱系统图

配电箱确实有很多字母,要熟悉这些字母的基本含义,才能更准确地知道配电箱系统图的意思。网上查了一些资料,发现配电箱中的字母实在是太多了,先简单说几个需要基本认识的字母:GCK、GCS、MNS是低压抽出式开关柜&#xff…

packt_Packt和Java Code Geeks提供的$ 5 Java编程书籍!

packt你好,极客! 今天,我们为您带来一些激动人心的消息! Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说,Java仍然是最强大的选择之一,它是定义企业和移动设备的语言。 本…

MacBook 如何一次性关闭所有程序的通知消息

特别反感应用程序经常弹出通知消息,挨个去关闭应用程序的通知消息又特别麻烦,可以打开『勿扰模式』,这就可以屏蔽掉所有的通知消息了。

反射获取list泛型_Android 从浅到懂使用反射机制

定义Java 反射机制是发生在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。使用…

谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha

谷歌 recaptcha介绍 Google的reCaptcha是一个库,用于防止漫游器将数据提交到您的公共表单或访问您的公共数据。 在本文中,我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例…

获取当地天气_Mac 天气预报动态壁纸工具Living Weather HD 4.4.4

这款独特的非凡应用程序将天气呈现在您的桌面上,它能够预报天气状况,并在桌面上使用相应的美丽动态壁纸场景。 天气HD也可以用作屏保。 主要功能: ● 在桌面上了解世界各地当前的天气状况和未来状况 ● 与当前天气状况、今天或明天预报相应的…

计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)

点击蓝字关注我哦11在微型计算机的各种设备中,既用于输入又可用于输出的设备是____。A、磁盘驱动器B、键盘C、鼠标D、绘图仪点击空白处查看答案参考答案:A12计算机的硬件系统由五大部分组成,下列各项中不属于这五大部分的是______。A、运算器B、软件C、I…