找回密码
  注册[Register]
查看: 954|回复: 8

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

  [复制链接]
发表于 2020-8-17 07:46 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

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






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




2.
第二种我用正则得到
  1. re.findall('本套图共 (.*?) 张', res)
复制代码




第三步 找图片ID


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




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




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


第四步下载
这样下载的图片可能不是本图集的图片。分析的时候没有付费,不确定到底是不是
今天怎么说了那么多废话??





上代码:

  1. import requests
  2. from lxml import etree
  3. import re
  4. import os
  5. import time

  6. headers = {
  7.     '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'
  8. }

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

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

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

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



如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-8-17 07:48 | 显示全部楼层
6666666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 07:48 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 08:44 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 08:48 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 08:52 | 显示全部楼层
好的,非常感谢
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 09:11 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 10:17 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-8-17 10:51 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-5-17 17:56 , Processed in 0.038366 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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