love4325 发表于 2019-12-13 19:32

mzitu爬虫,小福利。

刚学习python没多久,请多多指教。
用了四个模块,具体看代码4-7行,都是常用模块!
内容是爬取https://www.mzitu.com/ 的妹子图片
只写了一组套图的爬取

有两行代码需要自行填写,分别是:
第25行的url   需要自行填写组套图的网址;就是自己点开一个喜欢的图片的网址,例如:https://www.mzitu.com/215383
第60行的文件路径名   我是放在了桌面的img文件夹,img文件夹需要自行创建

好了,不废话了,下面放上代码
#https://www.mzitu.com/ 妹子图
# -*- coding: UTF-8 -*-

import requests
from lxml import etree
import time
import random

UserAgent=['Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
                    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
                    'Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50',
                    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
                    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)',
                    'Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
                  ]

Usera=random.choice(UserAgent) #随机一个UserAgent浏览器标识

#构造请求头信息,经测试mzitu网站光构造一个UserAgent不行
headers={'User-Agent':Usera,
         'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
         'Accept-Encoding': 'gzip',
         "Referer": "https://www.mzitu.com/all"}

url="https://www.mzitu.com/215383"    #具体网址需要自己填写

#套图一共多少页,读取endPage页码数字
data=requests.get(url,headers=headers).text
html=etree.HTML(data)
result=html.xpath('//div//div[@class="pagenavi"]/a/span')   
endPage=result[-2].text    #最后一页页码,str格式

class Spider(object):
        def __init__(self):
                self.url=url
                self.endPage=int(endPage)
                self.header=headers
                self.fileName=1
               
        #构造url:找到一共多少页,读取endPage页码数字
        def mztSpider(self):
                for page in range(1,self.endPage+1):
                        murl=url+"/"+str(page)
                        self.loadImages(murl)
       
        #通过每一页详情页,顺便获得图片的链接
        def loadImages(self,link):
                data=requests.get(link,headers=self.header).text
                html=etree.HTML(data)
                links=html.xpath('//div//div[@class="main-image"]/p/a//img/@src')
                time.sleep(0.1)   #经测试如果不用时间间隔,容易中间断掉
                for imageslink in links:
                        self.writeImages(imageslink)

        #通过图片所在链接,爬取图片并保存到本地
        def writeImages(self,imageslink):
                print("正在存储图片:",self.fileName,"...")
                image=requests.get(imageslink,headers=self.header).content
                #保存图片到本地
                file=open(r"C:\Users\XD\Desktop\img\\"+str(self.fileName)+".jpg","wb") #img是文件夹名字,具体可以自行设置
                file.write(image)
                file.close()
                self.fileName+=1

if __name__ == '__main__':
        print("该组图共有"+endPage+"张图片")
        start=Spider()
        start.mztSpider()
        print("下载完成!")


season000 发表于 2019-12-13 21:39

学习学习

老狗丶 发表于 2019-12-13 22:19

例如:https://www.mzitu.com/215383

这妹子的胸是有多大?我勒个去

forthebest 发表于 2019-12-14 10:12

楼主很有想法。{:301_986:}

renhgl 发表于 2021-3-14 20:51

Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\meizitu.py", line 31, in <module>
    endPage=result[-2].text    #最后一页页码,str格式
IndexError: list index out of range

黑鲨冷空气 发表于 2021-3-23 14:56

楼主很有想法,下回换个网站爬爬

3309min 发表于 2021-3-23 16:23

我有一个小想法,直接在他的首页将首页的<li>标签下的url全爬下来,放到url列表中,writeImages()函数里面可以加一点自动创建文件夹的活,去将那些url附近的名字截取下来当做文件夹的名字

yimn 发表于 2021-3-23 17:22

图呢楼主上传写样张可好{:1_886:}
页: [1]
查看完整版本: mzitu爬虫,小福利。