吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5873|回复: 39
收起左侧

[Python 转载] 自写Python小爬虫一个

[复制链接]
feifeishishuaib 发表于 2020-6-10 20:56
本帖最后由 feifeishishuaib 于 2020-7-9 00:29 编辑

闲来没事,自写一个Python爬虫,刚入门,大佬勿喷。
图片分辨率大概只有720p,虽不是高清大图,但练习练习Python还是很有用的。
QQ截图20200610205400.png
QQ截图20200610205437.png
[Python] 纯文本查看 复制代码
import requests
import re
import os

#类型列表
Type_list = {1:'qingchun',2:'xiaohua',3:'chemo',4:'qipao',5:'mingxing',6:'xinggan',}
Type_list_cn = {'qingchun':'青春美眉','xiaohua':'美女校花','chemo':'性感车模','qipao':'旗袍美女','mingxing':'明星写真','xinggan':'性感美女'}
#请求头
hd = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }

#主函数
def main():
    try:
        for i in range(1,7):
            #输出类型序号和名字 还有页数
            print(f"{i}.{Type_list_cn[Type_list[i]]} 共{get_TotalPage(Type_list[i])}页")
        #限制输入
        while(True):
            Type_num = input('输入要获取的美女类型:')
            if Type_num.isdigit():
                Type_num = eval(Type_num)
                if Type_num in range(1,7):
                    break
                else:
                    print('请输入1-6的数字!')
            else:
                print("请输入数字!")
        #类型
        Type = Type_list[Type_num]
        #总页数
        TotalPage = get_TotalPage(Type)
        #限制输入
        while(True):
            DownloadPage = input("请输入要获取前多少页(为空则全部):")
            if DownloadPage == '':
                DownloadPage = TotalPage
                break
            elif DownloadPage.isdigit():
                DownloadPage = eval(DownloadPage)
                if DownloadPage in range(1,TotalPage+1):
                    break
                else:
                    print(f"请输入1-{TotalPage}的数字!")
            else:
                print("请输入数字!")
        pic(Type_num,Type,DownloadPage)
    except:
        print("程序出错!\n")

#获取总页数
def get_TotalPage(Type):
    TotalPage = 0
    url = 'https://www.mm131.net/'+Type
    response = requests.get(url,headers = hd)
    response.encoding = 'gb2312'
    TotalPage_pattern = re.compile('(?<=下一页</a><a href=\'list_)\d_\d+')
    #正则匹配总页数
    match = (TotalPage_pattern.findall(response.text))
    TotalPage = eval(match[0].split('_')[1])
    return TotalPage

#下载图片总功能
def pic(Type_num,Type,DownloadPage):
    print("\n正在处理第1页")
    url = 'https://www.mm131.net/' + Type
    get_web(url,Type)
    if DownloadPage > 1:
        for page in range(2,DownloadPage+1):
            print("\n正在处理第{}页".format(page))
            #拼凑当前页url
            url = 'https://www.mm131.net/' + Type + '/list_' + str(Type_num) +'_'+ str(page) + '.html'
            get_web(url,Type)

#获取当前页网页信息用以获取套图数量和套图num
def get_web(url,Type):
    response = requests.get(url,headers = hd)
    response.encoding = 'gb2312'
    text_pattern = re.compile('您的位置[\s\S]*?末页')
    #先正则匹配一次缩小范围
    text = text_pattern.findall(response.text)
    PicList_pattern = re.compile(f'(?<=https://www.mm131.net/{Type}/)\d+')
    #再用正则匹配出套图NUM
    PicList = PicList_pattern.findall(text[0])
    total = len(PicList)
    print(f"这页有{total}个套图\n")
    for i in range(1,total+1):
        pic_num = PicList[i-1]
        print(f"    正在处理第{i}个套图:")
        #拼凑套图页面URL
        pic_url = 'https://www.mm131.net/' + Type + '/' + pic_num + '.html'
        get_pic(pic_url,pic_num,Type)

#获取套图页面信息用以获取套图名字和图片数量
def get_pic(pic_url,pic_num,Type):
    response = requests.get(pic_url,headers = hd)
    response.encoding = 'gb2312'
    pic_name_pattern = re.compile("(?<=<h5>).+(?=</h5>)")
    #套图名字
    pic_name = pic_name_pattern.findall(response.text)[0]
    print("    套图名字:"+pic_name)
    TotalPic_pattern = re.compile('(?<=共)\d+')
    #图片数量
    TotalPic = eval(TotalPic_pattern.findall(response.text)[0])
    print("    共{}张图片".format(TotalPic))
    #判断当前路径下是否存在相应目录,没有则创建
    if os.path.exists(f'图片/{Type_list_cn[Type]}/{pic_name}') == False:
        os.makedirs(f'图片/{Type_list_cn[Type]}/{pic_name}')
        #开始遍历下载图片
        for i in range(1,TotalPic+1):
            #文本进度条
            print("\r    正在下载第{:>2}张图片{:>3}%[".format(i,round(i*100/(TotalPic),1))+"$"*i+"-"*(TotalPic-i)+"]",end='')
            #第1个图片的referer和后面图片不一样
            if i == 1:
                referer = f'https://www.mm131.net/{Type}/{pic_num}.html'
            else:
                referer = f'https://www.mm131.net/{Type}/{pic_num}_{i}.html'
            #拼凑图片URL
            url = f'https://img1.mmmw.net/pic/{pic_num}/{i}.jpg'
            download_pic(i,url,pic_name,Type,referer)
    else:
        print("    套图已存在!",end = '')
    print("\n")

#下载图片
def download_pic(i,url,pic_name,Type,referer):
    head = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
        'Referer': referer
        }
    response = requests.get(url,headers = head)
    #下载到对应文件夹
    try:
        file = open(f'./图片/{Type_list_cn[Type]}/{pic_name}/{i}.jpg','xb')
        file.write(response.content)
        file.close
    except:
        print("    图片已存在!")
        
#无限循环主程序
while(True):main()



免费评分

参与人数 9吾爱币 +6 热心值 +8 收起 理由
mc牛仔 + 1 我很赞同!
ke307 + 1 + 1 谢谢@Thanks!
张大健 + 1 + 1 我很赞同!
13729283069 + 1 + 1 谢谢@Thanks!
a2258213 + 1 + 1 点个赞!!!!!
深爱我的女孩 + 1 谢谢@Thanks!
Zeaf + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
溺水蛙 + 1 谢谢@Thanks!
h6702402 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| feifeishishuaib 发表于 2020-6-16 19:34
AikeLa 发表于 2020-6-16 19:17
我想问问,为啥会莫名的出现一个二维码,还会重复打开的,这是代码的问题?还是爬取的网站有问题?

应该不是我这个程序生成的,源码里完全没有png后缀,下载的图片全是jpg,你找找看是不是其他原因
 楼主| feifeishishuaib 发表于 2020-6-12 15:54
awzs7758520 发表于 2020-6-12 14:15
requests模块找不到唉

用命令行管理员运行输入
pip install requests
如果速度慢就换到清华镜像
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
yc2940... 发表于 2020-6-10 21:18
 楼主| feifeishishuaib 发表于 2020-6-10 21:23
yc2940... 发表于 2020-6-10 21:18
Pytnon写爬虫用的代码是真的少

人生苦短,我用Python
Ldfd 发表于 2020-6-10 21:28
你得pyinstaller打包,伸手党才会高兴,人们才会献出热血(论坛现状逃
13608461856 发表于 2020-6-10 21:29
你这个扒的图片
点赞了
captainleslie 发表于 2020-6-10 21:33
哈哈 支持
dierzu 发表于 2020-6-10 21:37
学习学习python  谢谢啦
990914 发表于 2020-6-10 22:01
大佬代码写的真规范,漂亮,可以私下交流么?我也写python爬虫,但是英文和函数定义有些东西理解不了,以后肯定也要规范写法,想跟你学习
桌面.PNG
Zeaf 发表于 2020-6-10 22:06
这个编码方式真是少见(可能是我见识少)
这个进度条学习了
 楼主| feifeishishuaib 发表于 2020-6-10 22:16
Ldfd 发表于 2020-6-10 21:28
你得pyinstaller打包,伸手党才会高兴,人们才会献出热血(论坛现状逃

有道理,已加打包后成品
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-26 03:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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