爬虫(妹子图)
最近弄了个机器人然后发现没有没有图片资源
所以就写了个爬虫,爬了一点图片
(第一次发帖。。。话不多说上代码)
```python3
import requests as rq
from bs4 import BeautifulSoup
import sys
import time
import os
class images():
def __init__(self,dicts,head,imghead):
self.dicts=dicts
self.head=head
self.imghead=imghead
def getreques(self,url,head):
return rq.get(url,headers=head)
def getimgtable(self,data):
print(BeautifulSoup(data,'html.parser').find_all('img'))
return BeautifulSoup(data,'html.parser').find_all('img')
def createdir(self):
dir=sys.path+'\\src\\'
for path in self.dicts.values():
if os.path.exists(dir+path)==False:
os.mkdir(dir+path)
return dir
def writeimg(self,dir,name,img,page,i):
f=open(dir+name+'\\'+page+'--'+i+'.jpg','wb')
f.write(self.getreques(img.get('data-original'),self.imghead).content)
def run(self):
dir=self.createdir()
for pages,name in self.dicts.items():
for page in range(1,pages):
i=0
print('https://www.mzitu.com/'+name+'/page/'+str(page))
for img in self.getimgtable(self.getreques('https://www.mzitu.com/'+name+'/page/'+str(page)+'/',self.head).text):
print(img)
if 'data-original' in str(img):
i+=1
self.writeimg(dir,name,img,str(page),str(i))
def run_main():
dicts={
193:'xinggan',
30:'japan',
35:'mm',
}
head1={
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'cache-control': 'max-age=0',
'cookie': 'Hm_lvt_cb7f29be3c304cd3bb0c65a4faa96c30=1636799900,1636806558; Hm_lpvt_cb7f29be3c304cd3bb0c65a4faa96c30=1636806558',
'if-modified-since': 'Wed, 10 Nov 2021 13:09:33 GMT',
'sec-ch-ua': '"Microsoft Edge";v="95", "Chromium";v="95", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44'
}
head={
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Linux; Android 8.0.0; MIX 2 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,en-US;q=0.9',
'cookie': 'Hm_lvt_450e019eee95b5c453f724272dbc091d='+str(int(time.time())),
'cookie': 'Hm_lpvt_450e019eee95b5c453f724272dbc091d='+str(int(time.time())),
'x-requested-with': 'com.i8b073894b8d0cf7a'
}
imghead={
'user-agent': 'Mozilla/5.0 (Linux; Android 8.0.0; MIX 2 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36',
'accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'referer': 'https://m.mzitu.com/',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,en-US;q=0.9',
'x-requested-with': 'com.i8b073894b8d0cf7a'
}
images(dicts,head,imghead).run()
run_main()
```
使用方法:只需要把代码复制到一个文件里面,然后修改后缀名,爬取的图片会放到你这个文件的相对路径下的src里面,分三类所以会有三个文件夹,我用了什么包,你就需要用pip install 什么包 sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
图片地址是JS生成的,并且会验证referer,拥有防止跨域请求政策 本帖最后由 话痨司机啊 于 2022-5-19 22:00 编辑
sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
www.mmzztt.com通过主页地址算出来的图片地址,通过JS图片预加载,然后加载到网页里
所以思路就很简单了,构造加密函数,传入需要数据,生成图片地址,带着referer请求下载完事。
sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
我用DevTools花了挺久的时间找到关键所在了,这个网站并不是之前的根据分页进行请求了,而是直接用CryptoJs解密加密数据,从而得到一个图片数组,后续直接js响应对应的图片链接 还是挺复杂的{:1_908:} 本帖最后由 xyl52p 于 2021-11-23 22:32 编辑
感谢分享,我发现我这边的网络访问程序中的妹子图网站被reset了。{:1_925:}
P.S. 粗看下来好像没有sleep,会不会被网站BAN ip。
感谢分享。但妹子图网已经被墙了。:lol 核心是构建http头文件,其次 是对图片路径的分析。 感谢感谢。。 很单纯的我不知道妹子图是什么:eee 有点意思啊 先试试爬爬看,感谢分享 感谢分享{:1_918:}