1、首先导入相关库
import requests import bs4 import threading #用于多线程爬虫,爬取速度快,可以完成多页爬取 import os
2、使用bs4获取html中的内容
所爬取的网站:http://www.umei.cc/bizhitupian/diannaobizhi/1.htm 这只是第一页中的图片当然可以批量爬取里面所有的图片
bs = bs4.BeautifulSoup(requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm").text)
到这一步我们就已经拿到了该页面的HTML了,发现输出的HTML有点乱码,这时我们可以改良一下我们的代码
import bs4 import requests import os req = requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm") req.encoding="utf-8" bs = bs4.BeautifulSoup(req.text)
这样可以解决爬取出来的HTML乱码的问题
3、拿到HTML后就进行匹配我们所需要的图片标签
obj = bs.find_all("a",{"class":{"TypeBigPics"}}) #a代表的是<a>标签 class是<a>标签中所对应的class TypeBigPics为<a>标签中class中对应的值,根据class中的值找出对应图片的<a>标签
这时就拿到了图片所对应的所有的<a>标签 find_all()取去出所有匹配的对象,find()则是取出一条
4、接着取出<a>标签里面的所有img标签
imgObj=[] #用于存储img对象 for s in obj: imgObj.append(s.find("img")) #把取出的img对象存入imgObj数组中
5、接着获取img标签中src中的值
srcObj=[] #用于存储图片src对象for o in imgObj: srcObj.append(o.get("src"))
这时我们就得到了网页上所有图片的文件路径,下一步就可以进行下载这些图片了
6、下载图片
for img in srcObj: with open("D:\\Images\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功")
srcObj为上面所拿到的图片地址,D:\\Images\\为本地保存目录 注意:要用双斜杠 os.path.basename(img)为图片原文件名 也可替换成自己设置文件名 到这里简单的爬虫就已经结束了
7、全部代码如下
import bs4 import requests import os req = requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/1.htm") req.encoding="utf-8" bs = bs4.BeautifulSoup(req.text) obj = bs.find_all("a",{"class":{"TypeBigPics"}}) objHtml=[] objImg=[] for s in obj: objHtml.append(s.find("img")) for o in objHtml: objImg.append(o.get("src")) for img in objImg: with open("D:\\pics22223\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功");
8、使用多线程爬取此站所有的图片
这里就直接上源码了
import bs4 import requests import os
import threading def ojue(i): bs = bs4.BeautifulSoup(requests.get(r"http://www.umei.cc/bizhitupian/diannaobizhi/"+i+".htm").text) obj = bs.find_all("a",{"class":{"TypeBigPics"}}) objHtml=[] ImgObj=[] for f in obj: objHtml.append(f.get("href")) for z in objHtml: htmlText = bs4.BeautifulSoup(requests.get(z).text) Img = htmlText.find_all("img") for c in Img: ImgObj.append(c.get("src")) for img in ImgObj: with open("D:\\pics22223\\"+os.path.basename(img),'wb') as f: f.write(requests.get(img).content) print(os.path.basename(img)+"保存成功")for i in range(627): #range()从0开始取到627 threading.Thread(target=ojue,args=(i+1,)).start() #target 参数是对应的函数名称