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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7919|回复: 58
收起左侧

[Python 转载] 《天使美图》Xpath爬虫,用另类的方式破解付费

  [复制链接]
学海AoA无涯 发表于 2020-8-16 22:26
本帖最后由 学海AoA无涯 于 2020-8-17 21:02 编辑

print(“Holle, 吾爱吾爱”)
第三个了 AoA
那天有人让我看看天使美图这个网站,虽说不会破解付费,但是我找到他图集的规律,算是另类的破解付费了
第一步找图集地址
我们先进入搜索页面,可以找出搜索的图集排列规律Xpath(//*[@id="main-wrap-left"]/div[1]/article/div/h3/a)
里面有图集URL和title
image.png




第二步找图片的张数
找图片的张数,用来计算图集的ID,有两种形式
1. image.png
这一种我用Xpath得到
[Python] 纯文本查看 复制代码
res.xpath('//*[@id="main-wrap-left"]/div[1]/div[3]/div[1]/span[2]/text()')[0]

2. image.png
第二种我用正则得到
[Python] 纯文本查看 复制代码
re.findall('本套图共 (.*?) 张', res)



第三步 找图片ID


1、我先用Xpath找出第一张图片的URL
[Python] 纯文本查看 复制代码
第一张图片url = res.xpath('//*[@id="main-wrap-left"]/div[1]/div[3]/img/@src')[0]

2、接着用正则找出第一张图片的ID
[Python] 纯文本查看 复制代码
第一张图片ID = re.findall('/raw/master/img/(.*?).jpg', 第一张图片url)[0]

3、将第一张图片ID加上总图片数,就是整个图集的ID


第四步下载
这样下载的图片可能不是本图集的图片。分析的时候没有付费,不确定到底是不是
今天怎么说了那么多废话??
EXE打包链接:https://wwe.lanzouj.com/iMtwtfqc29e






上代码:
[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import re
import os
import time

headers = {
    'User-Agent': 'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}

search = input('你想要的女朋友是御姐还是萝莉???或者其他类型~~~ :  ')
url = 'https://www.tianshimeitu.com/?s=' + search
search_page = requests.get(url, headers=headers).content.decode('utf-8')
search_page = etree.HTML(search_page)
# 用Xpath得到搜索结果个数,strip()去掉两边的空格
search_res = search_page.xpath('//*[@id="breadcrumbs"]/div/text()')[0].strip()
# 用Xpath获得搜索页的图集URL地址
search_urls = search_page.xpath('//*[@id="main-wrap-left"]/div[1]/article/a/@href')
print(search_res)
print(search_urls)

for urls in search_urls:
    res = requests.get(urls, headers=headers).content.decode('utf-8')
    # 由于网站总的有3种方式,,,,免费,付费,积分??
    # 用了两种方式表示总的图片数
    # 第一种,付费模式,,,第二种,积分吗??
    # 第一种直接给出字符串,所以我用正则方式找到出图集共包含多少张图片
    totle = re.findall('本套图共 (.*?) 张', res)
    try:
        if len(totle) != 0: # 判断能够从字符串中找出总图片数
            totle = totle[0]
            res = etree.HTML(res)
            # 用Xpath查找出第二张图片的URL,第一种网页把第一张放在了第二个img的位置
            fristpic_url = res.xpath('//*[@id="main-wrap-left"]/div[1]/div[3]/p[1]/img[2]/@src')[0]
        else: # 如果第一种找不到,那就是第二种积分的
            res = etree.HTML(res)
            # 第二种是单独用一个span括起来的,我就用Xpath方式得到
            totle = res.xpath('//*[@id="main-wrap-left"]/div[1]/div[3]/div[1]/span[2]/text()')[0]
            # 查找出第一张图片的URL,第二种网页直接把第一张放在了开头
            fristpic_url = res.xpath('//*[@id="main-wrap-left"]/div[1]/div[3]/img[1]/@src')[0]
        # 找出第一张图片的ID
        first_ID = re.findall('/raw/master/img/(.*?).jpg', fristpic_url)[0]
        # 最后一张图片的ID就用第一张图片的ID加上之前找到的总的图片数量,,呵呵呵
        last_ID = int(first_ID) + int(totle)
        # 这里由于有些图集的URL前缀不一致,所以我从开头截取到最后一个斜杠的位置,得到URL前缀
        fristpic_url = fristpic_url[0:fristpic_url.rfind('/', 1) + 1]
    except: # 第三种免费的,直接就能找到URL,我就难得写了
        print('本图集免费,自己去保存!我是不会下载的 @_@!')
    title = res.xpath('/html/head/title/text()')[0] # 找出图集的名称
    print('_AoA_' * 100)
    print(title)
    print('总图片数:' + str(totle))

# 创建图集目录
    path = '天使美图\\{}\\{}'.format(search, title)  # 设置输出文件夹
    if not os.path.exists(path) :  # 判断文件夹不存在
        os.makedirs(path)  # 不存在则建立文件夹
        print('目录创建完成(*^v^*),记得设置为隐私文件哦^_^!')
    else:
        print('目录已创建(-o_)=3!!,一看就是老绅士了')

# 开始下载图片
    for i in range(int(first_ID), int(last_ID)): # 让程序在第一个ID雨最后一个ID中遍历,就得到了整个图集的图片地址了
        if os.path.exists('%s\%s.jpg'%(path, i)): # 判断图片存在于本地,就不重复下载
            print('图片 %s.jpg 已下载'% i)
        else: # 不存在就下载
            picurl = fristpic_url + str(i) + '.jpg' # 把地址前缀与图片ID拼接起来
            print('(≧^.^≦)喵~~~正在下载:' + picurl)
            pic = requests.get(picurl).content
            with open('%s\%s.jpg'%(path, i), 'wb') as f:
                f.write(pic)
    print(title + '\n下载完成!\n\n')
    # 设置一下延迟呢,我在跑的时候与服务器链接异常,不过这网站好像有反扒机制
    time.sleep(3)

免费评分

参与人数 8吾爱币 +7 热心值 +7 收起 理由
威武霸气帅V5 + 1 人才,码云做图床
hxl123 + 1 + 1 谢谢@Thanks!
sunv52pojie + 1 + 1 谢谢@Thanks!
Hacker_Xi + 1 + 1 学习了
猪头。 + 1 + 1 多谢前辈指点
JIAN_ + 1 + 1 谢谢@Thanks!
李玉风我爱你 + 1 https://gitee.com/kevin2099/pict
5ud0 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 学海AoA无涯 发表于 2020-8-17 09:57
青衫桑 发表于 2020-8-17 08:50
xpath用的是什么模块?看网上教程都是用lxml,但我引入不了etree

from lxml imput etree
从lxml库里面导入etree功能??
我也不太明白其中的道理,照着写就完了
或者你先 pip install lxml
 楼主| 学海AoA无涯 发表于 2020-8-17 00:01
就是这么帅 发表于 2020-8-16 23:07
思路不错
图都存在码云上,直接clone这个库就行了
https://gitee.com/kevin2099/pict

纳尼??原来图片库是开源的??
这无良的网站还要付费
温暖的心 发表于 2020-8-16 22:49
jreg 发表于 2020-8-16 22:58
非常厉害,思路巧妙
瞧学习 发表于 2020-8-16 23:05
学习,学习了,我觉得我的思路好像有开阔点了
就是这么帅 发表于 2020-8-16 23:07
思路不错
图都存在码云上,直接clone这个库就行了
https://gitee.com/kevin2099/pict
速闪小巨人 发表于 2020-8-16 23:10
感谢分享
bigdawn 发表于 2020-8-16 23:14
感谢分享,学习一下思路
goblin0427 发表于 2020-8-17 00:15
学习一下
anonym_zou 发表于 2020-8-17 00:16
谢谢分享,非常好的思路,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

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

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

GMT+8, 2024-5-5 18:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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