xjgg 发表于 2021-11-23 18:31

爬虫(妹子图)

最近弄了个机器人
然后发现没有没有图片资源
所以就写了个爬虫,爬了一点图片
(第一次发帖。。。话不多说上代码)

```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 什么包

话痨司机啊 发表于 2022-5-19 14:55

sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
                  





图片地址是JS生成的,并且会验证referer,拥有防止跨域请求政策

话痨司机啊 发表于 2022-5-19 21:55

本帖最后由 话痨司机啊 于 2022-5-19 22:00 编辑

sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
                  

www.mmzztt.com通过主页地址算出来的图片地址,通过JS图片预加载,然后加载到网页里

所以思路就很简单了,构造加密函数,传入需要数据,生成图片地址,带着referer请求下载完事。

herosyly 发表于 2021-12-30 15:21

sargwa 发表于 2021-12-12 11:35
www.mmzztt.com
获取的图片链接
                  


我用DevTools花了挺久的时间找到关键所在了,这个网站并不是之前的根据分页进行请求了,而是直接用CryptoJs解密加密数据,从而得到一个图片数组,后续直接js响应对应的图片链接 还是挺复杂的{:1_908:}

xyl52p 发表于 2021-11-23 22:30

本帖最后由 xyl52p 于 2021-11-23 22:32 编辑

感谢分享,我发现我这边的网络访问程序中的妹子图网站被reset了。{:1_925:}
P.S. 粗看下来好像没有sleep,会不会被网站BAN ip。

starwar 发表于 2021-11-23 22:45

感谢分享。但妹子图网已经被墙了。:lol

71q3M5cT9a 发表于 2021-11-23 22:51

核心是构建http头文件,其次 是对图片路径的分析。

tanzhilang 发表于 2021-11-23 23:18

感谢感谢。。

toutouxuejishu 发表于 2021-11-23 23:37

很单纯的我不知道妹子图是什么:eee

一星一尘 发表于 2021-11-24 00:06

skyadmin 发表于 2021-11-24 04:20

有点意思啊

周留伟 发表于 2021-11-24 07:55

先试试爬爬看,感谢分享

superccc 发表于 2021-11-24 08:04

感谢分享{:1_918:}
页: [1] 2 3 4 5 6
查看完整版本: 爬虫(妹子图)