zoukankan      html  css  js  c++  java
  • Python爬虫-萌妹子图片

    先来图

    最近发现一个可以看图的地方,一张张翻有点累,毕竟只有一只手(难道鼠标还能两只手翻?)。能不能下到电脑上看呢,毕竟不用等网速,还可以预览多张,总之很方便,想怎么就怎么,是吧?

    刚好这几天在学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学习。

  • 相关阅读:
    Django项目总结:Model高级
    Django项目总结:Response和Cookie
    数据库:索引
    数据库:视图
    数据库:约束
    MySQL:常用命令
    MySQL:安装和连接
    时间戳和正则表达式
    Java 类的概念与使用
    JAVA复习题
  • 原文地址:https://www.cnblogs.com/missile/p/6878378.html
Copyright © 2011-2022 走看看