Python爬虫-萌妹子图片
- 2019 年 10 月 10 日
- 筆記
最近发现一个可以看图的地方,一张张翻有点累,毕竟只有一只手(难道鼠标还能两只手翻?)。能不能下到电脑上看呢,毕竟不用等网速,还可以预览多张,总之很方便,想怎么就怎么,是吧?
刚好这几天在学python,刚好拿来试试手。
代码注释很详细就不做解释了。代码比较丑,有建议随便提,反正我也不改。
import requests as re from bs4 import BeautifulSoup import os #import threading #定义一个爬去图片的类 class Spider: # 传入图片地址,文件名,保存单张图片 def saveImg(self, imageURL, fileName): u = re.get(imageURL) data = u.content f = open(fileName, 'wb') f.write(data) f.close() def saveBrief(self, content, name): fileName = name + "/" + name + ".txt" f = open(fileName, "w+") f.write(content.encode('utf-8')) #创建新目录 def mkdir(self,path): path = path.strip() # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 if not isExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs(path) return True else: # 如果目录存在则不创建,并提示目录已存在 return False #下载每期的图片,并放入以标题为名字的目录中 def GetDeatilPage(self, url,encodeing="utf-8",folder=""): res = re.get(url) res.encoding=encodeing soup = BeautifulSoup(res.text, "html.parser") imgs = soup.select("article.article-content > p > img")#根据元素匹配所有的图片地址 if(len(imgs)>0): #检查目录是否存在,不存在就创建 if(folder!=""): folder=folder+"\" self.mkdir(folder+imgs[0].attrs.get("alt"))#创建目录 i=1 for img in imgs: imgurl = img.attrs.get("src")#获取图片路径 self.saveImg(imgurl, img.attrs.get("alt")+"\"+str(i)+".jpg")#保存图片 i=i+1 #获取页面上所有的期数连接 def GetAllPageUrl(self,url): res=re.get(url) soup=BeautifulSoup(res.text, "html.parser") urls=soup.select("div.excerpts > article.excerpt > a.focus") return [a.attrs.get('href') for a in urls] def loop(i): spider=Spider() urls=spider.GetAllPageUrl("http://www.52rkl.cn/mengmeizi/list_51_"+str(i)+".html") for url in urls: spider.GetDeatilPage(url) for i in range(1,25): loop(i) # threading.Thread(target=loop,args=(i),).start() # threading.Thread(target=loop,args=((i)*3+1),).start() # threading.Thread(target=loop,args=((i+1)*3+1,)).start() # threading.Thread(target=loop,args=((i+2)*3+1),).start() # threading.Thread(target=loop,args=((i+3)*3+1),).start() # threading.Thread(target=loop,args=((i+4)*3+1),).start() # threading.Thread(target=loop,args=((i+5)*3+1),).start() # threading.Thread(target=loop,args=((i+6)*3+1),).start() print("成功")
本来想实现多线程的,奈何按照网上说的都无效,还是单线程下载。知道怎么实现的还望不吝赐教。
git:https://github.com/dashenxian/ImageSpider
刚开始python学习。