Python爬虫综合:爬4K高清壁纸


[success]首先先申明一下,这个爬壁纸其实是需要会员的,因为你是否可以下载是在服务器那边判断的,我这边也没有办法,不过它这个终身的vip只要30元,所以还是挺划算的,这里我打算把它大概2400多张4K动漫壁纸都下下来,为了让我们看起来更友好,我们每隔一秒下一张吧。[/success]

好了,现在开干!

这里我还是直接贴代码,其他的东西也没什么好解释的。

# -*- coding:UTF-8 -*-
import requests, json, os, time
from threading import Thread
from bs4 import BeautifulSoup
from contextlib import closing#这个是图片下载的库

class img(object):
    def __init__(self):
        self.target = "http://pic.netbian.com/4kdongman/"
        self.urls = []
        self.names = []
        self.headers = {'Cookie':'你的cookie数据'}

    def geturl(self):
        for index in range(1, 116):
            if index != 1:
                target = self.target + 'index_' + str(index) + '.html'
            else:
                target = self.target
            req = requests.get(url=target)
            req.encoding = 'GBK'
            bf = BeautifulSoup(req.text, 'lxml')
            bf = bf.find_all("div", class_='slist')[0].find_all('a')
            for each in range(len(bf)):
                text = bf[each].attrs['href']
                self.names.append(text[8:text.find('.')])
                self.urls.append("http://pic.netbian.com/downpic.php?id=" + text[8:text.find('.')])

    def download(self, url, name):  # 这里就是下载图像的函数,配合多线程使用,使下载速度加倍
        print ('正在下载:%s' % name)
        if not os.path.exists('img'):  # 这里是创建文件夹
            os.makedirs('img')
        # 这里就是换一个路径,下载到img下
        with closing(requests.get(url=url, stream=True, headers=self.headers)) as r:  # 这里就是下载图片的代码了
            with open('img/%s.jpg' % name, 'ab+') as f:  # 这里是保存图片
                for chunk in r.iter_content(chunk_size=1024):  # 下面都是下载图片数据的代码,所以不解释
                    if chunk:
                        f.write(chunk)
                        f.flush()

    def moredown(self):
        self.geturl()
        threads = []  # 这里我们使用多线程,要把这些线程放到列表里
        for i in range(len(self.urls)):  # 我们要下多少图片就开多少线程
            t = Thread(target=self.download(self.urls[i], self.names[i]))  # 把函数加到线程里面
            t.start()  # 开始线程
            threads.append(t)  # 把线程都加到列表里面,方便后面判断是否下载完毕
            time.sleep(1)
        for t in threads:
            t.join()  # 这里就是等待线程结束的代码
        print ("下载完成")


if __name__ == "__main__":
    a = img()
    a.moredown()

实际效果如上图,这次爬2400多张图片每张大小大概为4M可能会下大概9G的数据,如果那边的服务器不把我封掉的话。。这个就真的非常爽了

几分钟后:好吧我承认我还是太天真了,原来这个会员虽然是永久的但是每天只能下200张图片,所以这次只爬了197张大概721M左右。

所以,我还要继续盘它,我们这次爬那些不要钱的动漫壁纸,大概也有2000多张,这次我就对他不客气了,不延时直接下,看一下总共多大。

等了20多分钟,终于把所有图片都爬完了,没想到别人的服务器居然没有封我,这次总共爬了2098张图片,大概有1个G吧。

好了,到这里就结束了,下次我还要继续接着爬4k的壁纸,一天下两百多张还是挺不错的。


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录