爬取全站 3000 多套小姐姐图片,整整 *10* 个G ,再也不用羡慕别人了

Posted 日常分享Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取全站 3000 多套小姐姐图片,整整 *10* 个G ,再也不用羡慕别人了相关的知识,希望对你有一定的参考价值。

目录

有图有真相:

整理的代码:


隔壁老王自从学会了Python爬虫,每天都在我面前炫耀他爬音乐,爬电影,嘲笑我还开会员,前天和我说他爬了九百多张小姐姐图,那看的我啊心生痒痒

于是,今天开干起来,你爬个九百张,我就爬个几千吧!气死隔壁老王

文件夹:

有图有真相:

具体可以自己尝试后就知道了,这里为了过审就马赛格了

79076 张图片,假设你在每张图片上停留的时间为 2 秒,你需要连续看 2636 分钟,也就是 43.9 个小时才能看完。身体要紧不能太拼命!

以为这样就完了?

too young too simple sometimes naive!

 

我对套图名字产生了兴趣 将套图名分词后统计词频并进行处理 对词频数超过 100 的词语生成条形图

看来命名也就要讲究技巧的 名字一定要足够吸引眼球xinggan **************

然后我又统计了代表着妹子的 字母 生成了条形图

G 真的是一柱擎天,EF 排在第二梯队。我们再来看看xiongwei的百分比情况

G 的比例是最大的,高达 42%,E 加上 F 也基本上有半壁江山了

视觉冲击还不够大? 那来一张词云吧

 

具体可以自己尝试后就知道了,这里为了过审就马赛格了

这图真的不忍直视阿

源码太多啦,想要获取完整的源码可以戳这里

以上如果想要操作一遍的或者想要代码的可以+关+私
或者+qq群聊 :222020937【既能学习也能接单,而且资料及视频代码也准备好了】 欢迎加入《广告勿加,不然你做啥啥不赚钱》

整理的代码:

第一部分:

import os
import json
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud


# 将所有文件夹名转换为 str 类型

folder_name = " ".join(os.listdir(r"D:\\mzitu"))

# jieba 分词

jieba.load_userdict(r".\\data\\jieba.txt")
seg_list = jieba.lcut(folder_name, cut_all=False)

# 利用字典统计词频

counter = dict()
for seg in seg_list:
    counter[seg] = counter.get(seg, 1) + 1
print(counter)

# 根据词频排序字典

counter_sort = sorted(
    counter.items(), key=lambda value: value[1], reverse=True
)

# print(counter_sort)

# 解析成 json 类型并写入文件

words = json.dumps(counter_sort, ensure_ascii=False)
with open(r".\\data\\words.json", "w+", encoding="utf-8") as f:
    f.write(words)

# 生成词云

wordcloud = WordCloud(
    font_path=r".\\font\\msyh.ttf", max_words=100, height=600, width=1200
).generate_from_frequencies(
    counter
)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file("worldcloud.jpg")

第二部分代码:

import re
import os
import time
import threading
from multiprocessing import Pool, cpu_count

import requests
from bs4 import BeautifulSoup

HEADERS = {
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                  '(Khtml, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
    'Referer': 'http:'
}

# 下载图片保存路径

DIR_PATH = r"D:\\mzitu"


def get_urls():
    """
    获取 mzitu 网站下所有套图的 url
    """
    page_urls = ['http:.com/page/{cnt}'.format(cnt=cnt)
                 for cnt in range(1, 193)]
    print("Please wait for second ...")
    img_urls = []
    for page_url in page_urls:
        try:
            bs = BeautifulSoup(
                requests.get(page_url, headers=HEADERS, timeout=10).text,
                'lxml').find('ul', id="pins")
            result = re.findall(r"(?<=href=)\\S+", str(bs))      # 匹配所有 urls
            img_url = [url.replace('"', "") for url in result]
            img_urls.extend(img_url)
        except Exception as e:
            print(e)
    return set(img_urls)    # 利用 set 去重 urls


lock = threading.Lock()     # 全局资源锁


def urls_crawler(url):
    """
    爬虫入口,主要爬取操作
    """
    try:
        r = requests.get(url, headers=HEADERS, timeout=10).text
        folder_name = BeautifulSoup(r, 'lxml').find(
            'div', class_="main-image").find('img')['alt'].replace("?", " ")
        with lock:
            if make_dir(folder_name):
                # 套图里图片张数
                max_count = BeautifulSoup(r, 'lxml').find(
                    'div', class_='pagenavi').find_all('span')[-2].get_text()
                page_urls = [url + "/" + str(i) for i in range(1, int(max_count) + 1)]
                img_urls = []

                for _, page_url in enumerate(page_urls):
                    time.sleep(0.25)
                    result = requests.get(page_url, headers=HEADERS, timeout=10).text
                    img_url = BeautifulSoup(result, 'lxml').find(
                        'div', class_="main-image").find(
                        'p').find('a').find('img')['src']
                    img_urls.append(img_url)
                for cnt, url in enumerate(img_urls):
                    save_pic(url, cnt)
    except Exception as e:
        print(e)


def save_pic(pic_src, pic_cnt):
    """
    保存图片到本地
    """
    try:
        time.sleep(0.10)
        img = requests.get(pic_src, headers=HEADERS, timeout=10)
        img_name = "pic_cnt_{}.jpg".format(pic_cnt + 1)
        with open(img_name, 'ab') as f:
            f.write(img.content)
            print(img_name)
    except Exception as e:
        print(e)


def make_dir(folder_name):
    """
    新建文件夹并切换到该目录下
    """
    path = os.path.join(DIR_PATH, folder_name)
    # 如果目录已经存在就不用再次爬取了,去重,提高效率。存在返回 False,否则反之
    if not os.path.exists(path):
        os.makedirs(path)
        print(path)
        os.chdir(path)
        return True
    print("Folder has existed!")
    return False


def delete_empty_dir(save_dir):
    """
    如果程序半路中断的话,可能存在已经新建好文件夹但是仍没有下载的图片的
    情况但此时文件夹已经存在所以会忽略该套图的下载,此时要删除空文件夹
    """
    if os.path.exists(save_dir):
        if os.path.isdir(save_dir):
            for d in os.listdir(save_dir):
                path = os.path.join(save_dir, d)     # 组装下一级地址
                if os.path.isdir(path):
                    delete_empty_dir(path)      # 递归删除空文件夹
        if not os.listdir(save_dir):
            os.rmdir(save_dir)
            print("remove the empty dir: {}".format(save_dir))
    else:
        print("Please start your performance!")     # 请开始你的表演


if __name__ == "__main__":
    urls = get_urls()
    pool = Pool(processes=cpu_count())
    try:
        delete_empty_dir(DIR_PATH)
        pool.map(urls_crawler, urls)
    except Exception:
        time.sleep(30)
        delete_empty_dir(DIR_PATH)
        pool.map(urls_crawler, urls)

 

以上是关于爬取全站 3000 多套小姐姐图片,整整 *10* 个G ,再也不用羡慕别人了的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫:运用多线程IP代理模块爬取百度图片上小姐姐的图片

Python爬虫:运用多线程IP代理模块爬取百度图片上小姐姐的图片

scrapy爬虫爬取小姐姐图片(不羞涩)

不羞涩社区图片爬取,我真的不是为了看小姐姐私照,从未这么渴望过知识!

用 Java 爬小姐姐图片,这个厉害了。。。

Python爬虫实战为何如此痴迷Python?还不是因为爱看小姐姐图