吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18526|回复: 74
收起左侧

[Python 转载] 摄影大师街拍美丽可爱的小姐姐,我用Python爬取魔镜原创摄影图。

 关闭 [复制链接]
可控核聚变 发表于 2021-1-6 12:18
本帖最后由 可控核聚变 于 2021-1-6 22:13 编辑

嗨!朋友们,大家好。我这两天在浏览魔镜原创摄影这个网站,里面有超多美丽可爱的小姐姐,都是一些街拍摄影大师的高质量作品,先上几张图look look:lol
mj5 (1).jpg cb.jpg
mj9.jpg 8f.jpg
e7.jpg mj8.jpg mjn.jpg

可是,这些都是小图,要看全套高清大图是要付费的,无奈我囊中羞涩,付不起这个钱(如果对这些作品感兴趣的朋友们也可以付费支持一下这些大师哦)。所以我只好把每个大师每个系列的展示图片爬下来,估计也有几千张图片,也能过过眼瘾了。
说干就干,代码一顿敲,终于找到图片地址了,准备下载!走你!

网页图片地址标签

网页图片地址标签


嗯?不对,怎么获取到的是一堆,什么鬼
mj6.jpg


我以为我标签搞错了,仔细反复检查了N遍,标签没问题呀,我又尝试获取同级标签下的其它标签属性,都能正确得到数据。唯独获取这个img src属性就给我来一堆这玩意:template/dsvue_black_gold/skin_img/t.gif
然后我就到Elements里面去搜索template/dsvue_black_gold/skin_img/t.gif 这串字符串哪来的?原来从这来的。

魔镜10.jpg

当我看到text/javascript这几个字时我就怂了,我没学过javascript呀,对javascript一窍不通,我只能上度娘查如何解决这个lazyLoadImg。原来这个叫懒加载模式(具体是什么我就不说了,可以网上查),很多帖子都说使用js_script可以解决,可我不会咋办咧?代码都敲了这么多行,就这样完蛋了,MD,我不甘心就这样被她征服,喝下她藏好的毒。

继续查,终于在CSDN上有一哥们说可以通过打印网页源码,对比文本,就能找到img标签中真正存放图片链接的属性。试试呗!

打印网页源码

打印网页源码


通过对比网页源码文本,终于找到目标,就是这么简单。

找到真实的标签

找到真实的标签


OK,走起!
mo7.jpg

上全部代码:
[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import re
import os
from faker import Factory
import ast
import random

class MoJing_Spider(object):
    def __init__(self):
        user_agent = []
        for i in range(30):
            f = Factory.create()
            ua = "{{{0}}}".format("'User-Agent'" + ":" + "'{}'".format(f.user_agent()))
            headers = ast.literal_eval(ua)  # 使用 ast.literal_eval 将str转换为dict
            user_agent.append(headers)
        self.headers = random.choice(user_agent)
        self.start_url = 'https://www.520mojing.com/forum.php'  # 网站根地址
        self.main_folder = r'/Volumes/魔镜街拍图'  # 主路径
        # print(self.headers)

    # 解析主页
    def data_range(self):
        start_res = requests.get(url=self.start_url, headers=self.headers)
        start_sel = etree.HTML(start_res.content.decode())
        return start_sel
    # 获取网址列表
    def get_author_url(self, start_sel):
        main_url_list = start_sel.xpath('//dt[@style="font-size:15px; margin-top:6px"]/a/@href')
        return main_url_list
    # 获取分区网址
    def create_url(self, author_url):
        author_res = requests.get(url=author_url, headers=self.headers)
        author_sel = etree.HTML(author_res.content.decode())
        try:
            id = re.findall(r'https://www.520mojing.com/forum-(.*?)-1.html', author_url)[0]
            len_page = author_sel.xpath('//span[@id="fd_page_top"]/div/label/span/text()')[0].replace('/ ', '').replace(' 页', '')
            len_page = int(len_page)
            name = author_sel.xpath('//div[@class="bm_h cl"]/h1/a/text()')[0]
            print(f'=================正在保存{name}图片,共{len_page}页=================')
            return name, id, len_page
        except IndexError:
            pass
    # 获取每页图片链接
    def get_pciturelinks(self, page_url):
        picture_res = requests.get(url=page_url, headers=self.headers)
        picture_sel = etree.HTML(picture_res.content.decode())
        try:
            pciture_links = picture_sel.xpath('//div[@class="c cl"]/a/img/@data-src')
            return pciture_links
        except IndexError:
            pass
    # 保存图片
    def save_picture(self, name, link, num):
        try:
            # 创建多层文件夹
            folder = self.main_folder + '/' + name + '/' + str(num) + '/'
            if not os.path.exists(folder):
                os.makedirs(folder)
            with open(folder + link.split('/')[-2] + os.path.splitext(link)[-1], 'wb') as f:
                image = requests.get(url=link, headers=self.headers).content
                f.write(image)
        except:
            print('保存失败')

    def run(self):
        start_sel = self.data_range()
        main_url_list = self. get_author_url(start_sel)
        for author_url in main_url_list:
            name, id, len_page = self.create_url(author_url)
            for num in range(1, len_page + 1):
                page_url = f'https://www.520mojing.com/forum-{id}-{num}.html'
                pciture_links = self.get_pciturelinks(page_url)
                for link in pciture_links:
                    # print(link)
                    self.save_picture(name, link, num)

if __name__ == '__main__':
    MoJing = MoJing_Spider()  # 实例化对象
    MoJing.run()


我在测试代码的时候,访问网站的次数过多,所以我就弄了几个随机的请求头,不知道有没有用。运行代码之前改一下self.main_folder的路径就可以了,朋友们开心就好!

免费评分

参与人数 9吾爱币 +9 热心值 +5 收起 理由
FirmTao + 1 我很赞同!
xiaopa + 1 我很赞同!
ookk + 1 热心回复!
暧昧乱人心1314 + 1 + 1 我很赞同!
泽哥 + 1 + 1 热心回复!
gf7802346 + 2 + 1 谢谢@Thanks!
l2430478 + 1 用心讨论,共获提升!
dzqaww + 1 + 1 热心回复!
huazai_xp + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

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

gf7802346 发表于 2021-2-8 20:35
本帖最后由 gf7802346 于 2021-2-9 00:12 编辑

[Java] 纯文本查看 复制代码
魔镜无水印大图api

api :[url=https://api.huaishu520.com:8080/]https://api.huaishu520.com:8080/[/url] ... ges/images/listpage
post:{"page":"1","limit":"500","orderbyType":"id"}

api:[url=https://api.huaishu520.com:8080/renren-fast/images/images/frontinfo/2131]https://api.huaishu520.com:8080/ ... ages/frontinfo/2131[/url]
get:

















免费评分

参与人数 1吾爱币 +1 收起 理由
panpanpan + 1 太强了吧兄弟

查看全部评分

 楼主| 可控核聚变 发表于 2021-1-15 23:54
我睡一会再来 发表于 2021-1-15 22:55
默认文件夹放在了哪里

你把这个self.main_folder变量的路径改成你自己电脑文件夹的路径。
gf7802346 发表于 2021-2-8 20:45
本帖最后由 gf7802346 于 2021-2-9 00:13 编辑

[Java] 纯文本查看 复制代码
https://api.huaishu520.com:8080/renren-fast/images/images/frontinfo/2179



















ming_2794 发表于 2021-1-8 22:55
感谢分享,学习学习!
dzqaww 发表于 2021-1-9 19:03
D:\pycharm\pythonProject\venv\Scripts\python.exe D:/pycharm/pythonProject/mm/4.py

进程已结束,退出代码0

直接就...
tjf 发表于 2021-1-10 17:42
我怀疑你开车, 但是我没有证据
 楼主| 可控核聚变 发表于 2021-1-10 23:34
dzqaww 发表于 2021-1-9 19:03
D:\pycharm\pythonProject\venv\Scripts\python.exe D:/pycharm/pythonProject/mm/4.py

进程已结束,退出 ...

先要改文件夹路径
fault 发表于 2021-1-10 23:48
一边学习,一边“学习”
相信无限活宝 发表于 2021-1-12 13:48
东西很不错啊
 楼主| 可控核聚变 发表于 2021-1-12 18:01

感谢支持
我睡一会再来 发表于 2021-1-15 22:55
默认文件夹放在了哪里
xjshuaishuai 发表于 2021-1-15 23:32
谢谢楼主的分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-22 18:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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