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)
python爬取网站的图片相关推荐
- python爬取网站源代码+图片
python爬取网站源代码+图片 需求分析 基础知识 正则表达式 python网络请求 文件读写 实现 基本思路 具体实现 结果 总结 需求分析 大部分有志青年都想建立属于自己的个人网站,从零开始设计 ...
- python爬虫怎么爬取图片_怎么用python爬取网站Jpg图片
用python爬取网站图片,通过引用requests库就可完成.下面,小编将以爬取百度图片为例 工具/原料 python环境,网络 安装requests库 1 cmd打开命令行界面,输入pip ins ...
- python爬取网站美女图片
今天周五,项目刚刚上线完,有些时间,闲着无聊,继续复习爬虫,这次打算爬取网站的美女图片.得先找到目标,然后目标网站还不会反爬虫,因为自己只是小白,好了开始. 寻找目标,发现了目标,哈哈 http:// ...
- python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片
原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...
- Python爬取网站图片并保存,超级简单
Python爬取网站图片并保存,超级简单 先看看结果吧,去bilibili上拿到的图片=-= 第一步,导入模块 import requests from bs4 import BeautifulSou ...
- Python爬虫实战之爬取网站全部图片(一)
Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12 打开开发人员工具点击e ...
- Python爬取网站图片数据
Python爬取网站图片数据 找到需要爬取的网站地址 模拟网站http请求 根据调试模式获取的了解读取到真实的地址url,读取请求头数据和参数信息,模拟http请求调用 import requests ...
- python爬取动态网页图片
爬取某知名网站图片(爬取动态网页) python爬取动态网页图片 python爬取动态网页图片 环境: python3.pycharm 库: requests.urllib.json 思路: 1.分析 ...
- Python爬取小姐姐图片
使用Python爬取小姐姐图片 首先上网站链接 唯美女生 爬取图片主要分为一下几步: 1.打开一个你喜欢的小姐姐的网站 E.g xiaojiejie web 2.下载并安装python环境 pytho ...
最新文章
- 解决莫名其妙出现connection closed的错误
- Android导入工程提示Invalid project description
- bg和fg指令(整理)以及 Linux中Ctrl+C、Ctrl+D等按键操作进程相关命令
- java转换音频采样率_转换音频采样率
- html美化file按钮,css 美化file按钮
- mysql数据库txt备份linux_linux备份mysql数据库
- Linux echo
- Java compiler level does not match the version of the installed Java project fac
- Java 程序员中位数薪资达 1.45 万,但面试屡屡被拒?
- LVM逻辑卷使用手册
- 使用yum方式安装mysql5.6
- 多视角子空间学习系列之 MCCA (Multi-view CCA) 多视角CCA Horst算法
- “iPad 上不可错过的应用有哪些?”
- FlashPaper Win2003部署
- php风格模板,phpwind冷色调整站风格模板
- 导出word如何默认打开为页面视图
- P12-Windows与网络基础-Windows组管理
- 后台架构设计—数据存储层
- python画微信表情_python画微信表情符的实例代码
- 服装智能供应链管理系统和企业以需要为导向