ps:个人感觉这网站图也没那么好看,这一两年网上搜学爬虫都是拿这个站练手。。导致这个网站好像也在不断更迭反爬技术,这网站图一般般,主要是分辨率不大,我喜欢分辨率大点的,当然了主要是限制看20张以后的图片,这就让人很抓心,得不到的永远是最好的,然后,然后我后面就想到了个笨办法实现了后面20张图片下载
下载了几个列表页,后面没下了,限制太多,下的太慢。。。加上分辨率确实不行
原理
很简单,就是就是先判断图片地址是几位数的,这网站的图片地址总共有3种情况
10,11和超过11长度的,超过11长度的,那就没办法了下载了,可能性太多,为了下图片还不至于,10的话,最简单直接猜最后字母就行,11的话,也简单,猜最后两位的字母
我刚试了下,找到上个月的代码还能用
字母顺序可以优化下,频率高的放前面,基本上5 6个之内就能猜出来正确的地址,基本也就前面几个字母
注意:
这个方法只能下载,列表页12页之后的所有链接,12页之前的就没办法下载了(2月的时候是12页之后的,3月估计更新了那就只能是13页之后,或者14页后面的。。。)
改了下代码,有两种模式,模式一可以修改列表那的数量,模式二可以选择自己喜欢的页面下载了,多条链接可以用英文,号隔开
最后要有违规的话,麻烦删下。。。
import re
import os
import requests
headers = {
'cache-control': 'no-cache',
'pragma': 'no-cache',
'referer': 'https://mmzztt.com/',
'sec-ch-ua': '"Microsoft Edge";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'image',
'sec-fetch-mode': 'no-cors',
'sec-fetch-site': 'cross-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35',
}
path = 'D:\\down\\img\\' # 这里是图片保存的目录
zmb = ['c', 'b', 'a', 'i', 'h', 'f', 'e', 'g', 'd', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z']
lb_zz = re.compile('uk-margin-small-top uk-margin-remove-bottom">')
nry_zz = re.compile('referrerpolicy="origin" src="(.*?)"')
bt_zz = re.compile(r'(.*?)')
max_zz = re.compile('max="(.*?)">')
def tudzjx(nry):
for turl in nry:
tp_request = requests.get(url=turl, headers=headers)
tpurl = nry_zz.search(tp_request.text).group(1)
bt = bt_zz.search(tp_request.text).group(1).replace('"', '').replace('"', '')
maxd = max_zz.search(tp_request.text).group(1)
tpurlname = tpurl.split('/')[-1]
if len(tpurlname) >= 11:
print('改版后页面跳过~换。。。')
continue
elif len(tpurlname) == 10:
print('分析中。。。。。。')
print('可以下载超过15张图')
tpxzlj = re.search('^(.*)(?=\w{3}\.)', tpurl).group(1)
xztt_10(tpxzlj, maxd, bt, tpurlname)
else:
print('可以下载超过15张图')
tpxzlj = re.search('^(.*)(?=\w{2}\.)', tpurl).group(1)
xztt_10(tpxzlj, maxd, bt, tpurlname)
def xztt_10(tpxzlj, maxd, bt, tpurlname):
for x in range(1, int(maxd) + 1):
for y in zmb:
if len(tpurlname) == 10:
tt = f"{tpxzlj}{'0' + str(x) if x