返回顶部

收藏

多线程抓网站图片

更多
if __name__ == '__main__':
    for page in range(sPage,ePage+1):   # 下载的page范围
        print '>'*40+(' Page %d ' % page)+'<'*40
        urlPage = urlRoot+'/p01/list_%d.html' % page    # page页的url
        for i in range(downCount):      # 每页下载的幅度
            print '>'*38+(' Down Count %d ' % i)+'<'*38
            dirPathHtml = os.path.join(sys.path[0],'html',str(page))    # html源码保存的目录
            if not os.path.exists(dirPathHtml):     # dirPathHtml不存在
                os.makedirs(dirPathHtml)            # 创建dirPathHtml目录,只会执行一次
            pageHtmlFile = os.path.join(dirPathHtml,'%s.html' % str(page))  # page页源码文件的完整路径
            if not os.path.exists(pageHtmlFile):        # pageHtmlFile不存在
                start = time.time()
                saveHtmlSrc(urlPage, pageHtmlFile)      # 下载page页源码保存到pageHtmlFile里
                print "Total time: %s" % (time.time() - start)
            else:   # pageHtmlFile已存在
                print dirPathHtml
                childUrlList = getChildUrls(pageHtmlFile, urlRoot)  # 获取page页内的子链接列表
                if len(childUrlList) > 0:   # 有子链接
                    start = time.time()
                    print 'Files: ',sum([len(files) for root,dirs,files in os.walk(dirPathHtml)]) - 1   # 显示目前已下载的子链接文件数量,减1是为了去掉page页的源码文件(它们是保存在一个目录下的)
                    for childUrl in childUrlList:   # 多线程下载子链接的html源码
                        childHtmlName = childUrl.split('/')[-1]     # 子链接.html文件名是一个数字或字母不需要字符集转换
                        childHtmlFile = os.path.join(dirPathHtml,childHtmlName) # 子链接源码文件的完整路径
                        cHtml = CatchSaveHtml(childUrl, childHtmlFile)
                        cHtml.start()
                    cHtml.join()
                    print "Total time: %s" % (time.time() - start)

                    for childUrl in childUrlList:   # 遍历子链接
                        childHtmlFile = os.path.join(dirPathHtml,childUrl.split('/')[-1])   # 子链接源码文件的完整路径
                        if os.path.exists(childHtmlFile):       # childHtmlFile存在
                            imgUrls = getImgUrls(childHtmlFile) # 获取子链接内的图片链接列表
                            if len(imgUrls) > 0:    # 有图片
                                start = time.time()
                                dirPathPagePic = os.path.join(sys.path[0],'pic',str(page))  # 整个page的图片存放负的根目录
                                if not os.path.exists(dirPathPagePic):      # dirPathPagePic目录不存在
                                    os.makedirs(dirPathPagePic)             # 创建dirPathPagePic目录
                                # dirName = getHtmlTile(childHtmlFile)  # 图片的父目录名(来自html的标题title)
                                dirName = urllib2.unquote(str(imgUrls[0].split('/')[-2])).decode('utf-8', 'ignore').encode('gbk', 'ignore') # 图片的父目录名(取的imgUrls列表第一个链接,所有的url链接前半部分是一样的)
                                dirPathImg = os.path.join(dirPathPagePic,dirName)   # 图片存放的完整目录
                                if not os.path.exists(dirPathImg):  # dirPathImg不存在
                                    os.makedirs(dirPathImg)         # 创建dirPathImg
                                print 'Files: ',sum([len(files) for root,dirs,files in os.walk(dirPathImg)])    # 显示当前子链接内已下载的图片数量
                                for imgUrl in imgUrls:  # 多线程下载子链接内的图片
                                    imgFileName = os.path.join(dirPathImg,str(imgUrl.split("/")[-1]))   # 图片文件存放的完整路径名,图片名是一个数字或字母不需要字符集转换
                                    cImg = CatchSaveImg(imgUrl, imgFileName)
                                    cImg.start()
                                cImg.join()
                                print "Total time: %s" % (time.time() - start)

标签:python

收藏

0人收藏

支持

0

反对

0

发表评论