刚学习python没多久,请多多指教。
用了四个模块,具体看代码4-7行,都是常用模块!
内容是爬取https://www.mzitu.com/ 的妹子图片
只写了一组套图的爬取
有两行代码需要自行填写,分别是:
第25行的url 需要自行填写组套图的网址;就是自己点开一个喜欢的图片的网址,例如:https://www.mzitu.com/215383
第60行的文件路径名 我是放在了桌面的img文件夹,img文件夹需要自行创建
好了,不废话了,下面放上代码
[Python] 纯文本查看 复制代码 #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("下载完成!")
|