首先附上需要爬取图片的网站,应该算是个冷门网站,够练手用的了,我的博客图片大部分来自于这里
二次元图片网站
筛选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))
这是我第一次完完全全封装好代码,自己研究某个网站的一些属性,到一点点琢磨,终于把那种本来需要机械重复无数次的操作,变为高效又简洁的代码。尽管代码还不够强健
但是通过自己一点一点完善推敲出来的感觉就是不一样
加入死循环后只需重复添加首页地址即可,看中那个首页就直接下载下来
完美,改天换别的网站继续爬!!!!加油
爬图一时爽,一直爬图一直爽!!!!