吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 35042|回复: 181
上一主题 下一主题
收起左侧

[其他] Python爬虫(美女图片爬取)

    [复制链接]
跳转到指定楼层
楼主
LC266036 发表于 2019-7-11 14:34 回帖奖励
本帖最后由 LC266036 于 2019-7-21 13:53 编辑



代码放在txt中说是变相上传文件
分析思路就是代码上的注释
这样都算违规
所以麻烦版主帮忙把帖子删除吧!!!!
给各位添麻烦了

解释器为Python3.6



第三方库:  requests 和 lxml



爬虫为单进程爬虫



每小时大概能爬取9K张图片



实际爬取数量和电脑性能和网络速度有关

由于有些人不会用,也没有pyton解释器,我把代码打包成EXE文件上传到百度云
可以直接双击运行,关闭直接点击右上角关闭(本人W10)
链接: https://pan.baidu.com/s/1pqqI2stSpltVyPDJwmWjjQ 提取码: fbvm



[Python] 纯文本查看 复制代码
import os
import shutil

import requests
from lxml import etree


class MZiTu:

    # 初始化对象属性
    def __init__(self):
        self.index_url = "https://www.mzitu.com/"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
            "Referer": "https://www.mzitu.com/"
        }
        self.path = input('请输入保存的文件夹名(默认为--meizitu--):')

    # 发送request请求
    def send_request(self, url):
        return requests.get(url, headers=self.headers, timeout=3).content

    # 解析每页的数据
    def parse(self, html_str):
        html = etree.HTML(html_str)
        titles = html.xpath('//img[@class="lazy"]')
        content_list = []
        for title in titles:
            item = {}
            item['title'] = title.xpath('./@alt')[0]
            item['href'] = title.xpath('../@href')[0]
            content_list.append(item)
            # print(item)
        # print(content_list)
        next_url = html.xpath('//a[contains(text(),"下一页")]/@href')
        next_url = next_url[0] if next_url else None
        return content_list, next_url

    # 获取每张写真集的img_url
    def get_img_url(self, detail_html):
        html = etree.HTML(detail_html)
        img_url = html.xpath('//div[@class="main-image"]/p/a/img/@src')[0]
        next_img_url = html.xpath('//span[contains(text(),"下一页")]/../@href')
        next_url = next_img_url[0] if next_img_url else None
        return img_url, next_url

    # 判断文件夹是否存在,不存在创建文件夹
    def mkdir(self, dir_name, img_url_list):
        total_image = len(img_url_list)
        meizi_dir = self.path if self.path else 'meizitu'
        final_dir = meizi_dir + '/' + '[{}P]'.format(str(total_image)) + dir_name
        if os.path.exists(final_dir):
            shutil.rmtree(final_dir)
        os.makedirs(final_dir)
        return final_dir

    # 保存img
    def save_image(self, j, final_dir, img_url_list):
        for img_url in img_url_list:
            try:
                image_data = self.send_request(img_url)
            except:
                continue
            file_name = final_dir + '/' + img_url[-9:]
            with open(file_name, 'wb') as image:
                image.write(image_data)
            print("*" * 14, img_url, '下载完成', "*" * 14)
        print("-" * 29 + '第{}张写真集保存完毕'.format(int(j)) + "-" * 30 + '\n\n')

    # 运行爬虫
    def run(self):
        # 1. 获取url
        next_page_url = self.index_url
        i = 1
        # 获取每页的url地址并解析
        while True:
            # 2. 发送请求,获取响应
            try:
                html_str = self.send_request(next_page_url).decode()
            except:
                continue
            # 3. 解析数据
            content_list, next_page_url = self.parse(html_str)
            # 4. 获取详情页的img
            j = 1
            # 获取每张写真集并解析
            for content in content_list:
                img_url_list = []
                print("-" * 30 + '正在获取第{}张写真集'.format(int(j)) + "-" * 30)
                # 获取每张写真集的img_url
                # 第一页的img地址
                dir_name = content['title']
                next_url = content['href']
                # print(next_url)
                # 获取每张写真集每页的img_url
                while True:
                    try:
                        detail_html = self.send_request(next_url).decode()
                    except:
                        continue
                    img_url, next_url = self.get_img_url(detail_html)
                    # 第二页的img地址
                    # detail_html = self.send_request(next_url)
                    # img_url, next_url =self.get_img_url(detail_html)
                    img_url_list.append(img_url)
                    if next_url is None:
                        break
                # 保存图片
                if img_url_list:
                    final_dir = self.mkdir(dir_name, img_url_list)
                    self.save_image(j, final_dir, img_url_list)
                j += 1
            print("-" * 32 + '第{}页获取完成'.format(int(i)) + "-" * 32 + '\n\n')
            i += 1
            if next_page_url is None:
                break


def main():
    mz = MZiTu()
    mz.run()


if __name__ == '__main__':
    main()

XK}UVNMXI}NGG692OC8@6.png (254.83 KB, 下载次数: 205)

爬取过程图

爬取过程图

]}HS%7X9$JRNPXMB10OFK{G.png (222.61 KB, 下载次数: 221)

爬取效果图

爬取效果图

免费评分

参与人数 40吾爱币 +38 热心值 +32 收起 理由
abcde1224 + 1 热心回复!
43037384 + 1 + 1 热心回复!
tyho + 1 谢谢@Thanks!
QT12688 + 1 谢谢@Thanks!
张爱乐林 + 1 + 1 用心讨论,共获提升!
熊肥肥 + 1 + 1 用心讨论,共获提升!
夏天ng + 1 + 1 谢谢@Thanks!
zhang027 + 1 + 1 谢谢@Thanks!
wangz5588 + 1 热心回复!
dingkui + 1 + 1 我很赞同!
z108200555 + 1 + 1 用心讨论,共获提升!
metallbb + 1 我很赞同!
xdmzjx + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Badboy灬鑫少 + 1 + 1 我很赞同!
xiaoyang1992 + 1 + 1 我很赞同!
Mr-deng + 1 + 1 我很赞同!
Neeego + 1 + 1 我很赞同!
若翾婳祎 + 1 + 1 论坛禁止求脱求破,求助软件分析思路,务必在主题帖中描述清楚你的分析思路.
napolen + 1 + 1 谢谢@Thanks!
小鱼在此呵 + 1 + 1 热心回复!
fsl龙行天下 + 1 + 1 我很赞同!
as1101102as + 1 + 1 给我也整一个.jpg
阿礼波鸡 + 1 + 1 来一瓶营养快线
心乄好累 + 1 + 1 我很赞同!
wego + 1 用心讨论,共获提升!
陪我去洱海 + 1 + 1 热心回复!
无忌飞段 + 1 + 1 身体一天不如一天了。。。
罗网 + 1 + 1 我很赞同!
ache_for_pure + 1 + 1 热心回复!
xihua + 1 + 1 谢谢@Thanks!
wss1280 + 1 + 1 谢谢@Thanks!
寒风乱 + 1 我很赞同!
a525 + 1 真6
a627846546 + 1 + 1 我很赞同!
Edenliu + 1 + 1 鼓励转贴优秀软件安全工具和文档!
lmt19841123 + 1 鼓励转贴优秀软件安全工具和文档!
HeyNeco + 1 热心回复!
fengwolf3 + 1 + 1 优秀
791522507 + 1 + 1 Win7 64位 回车后闪退咋回事
ChenM2019 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
幻化万千戏红尘 发表于 2019-7-11 14:38
没有使用教程吗,一脸懵逼
推荐
内裤超人 发表于 2019-7-11 14:52
这个之前就有人发过了,都是这种爬美女图片,真没意思
推荐
无梦无爱 发表于 2019-7-11 14:41
5#
dickmiss 发表于 2019-7-11 14:42
我不会用
6#
 楼主| LC266036 发表于 2019-7-11 14:42 |楼主
幻化万千戏红尘 发表于 2019-7-11 14:38
没有使用教程吗,一脸懵逼

下载个解释器,然后把代码放到解释器中运行
7#
dad9 发表于 2019-7-11 14:52
py 3.x编码支持好很多
8#
longiana 发表于 2019-7-11 14:53
图分辨率不高不好看,技术可以借鉴
9#
 楼主| LC266036 发表于 2019-7-11 15:03 |楼主

可以上传百度云连接吗?
10#
 楼主| LC266036 发表于 2019-7-11 15:04 |楼主
内裤超人 发表于 2019-7-11 14:52
这个之前就有人发过了,都是这种爬美女图片,真没意思

那你想爬取什么?
我这才学五六天的,爬取视频什么的不会
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 15:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表