引子
包括我在内的广大宅男经常上的网站之一就是mzitu.com,个人认为属于做的非常好的美女图片网站。最近在学python于是想自己做一个爬虫,把这些美女抓下来存到自己电脑上,说干就干不墨迹。
过程
由于本人水平有限,也是初学者,所以参考了http://cuiqingcai.com/3179.html这篇帖子的主要思路。做了一点小小的改动,原作者是爬取mzitu整站的图片,我改为仅爬取性感妹子目录下的图片,你懂得~
主要过程是
- 分析网页结构(代码特点)
- 用BeautifulSoup找到自己需要的内容
- 用requests来下载相应内容
代码
代码github链接在此
# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import os def getimg(baseurl, title): #baseurl是第一张图片地址,输入变量后,可以获取此组图片,保存在文件夹内 #name = name html = requests.get(baseurl, headers=headers) html_Soup = BeautifulSoup(html.text, 'lxml') max_span = html_Soup.find('div', class_='pagenavi').find_all('span')[-2].get_text() path = title.replace('?', '_').replace(' ', '_') mkdir(path) os.chdir("E:\mzitu\\"+path) for page in range(1, int(max_span)+1): ##不知道为什么这么用的小哥儿去看看基础教程吧 page_url = baseurl + '/' + str(page) ##同上 #print(page_url) img_html = requests.get(page_url, headers=headers) img_Soup = BeautifulSoup(img_html.text, 'lxml') img_url = img_Soup.find('div', class_='main-image').find('img')['src'] ##这三行上面都说过啦不解释了哦 #print(img_url) name = img_url[-9:-4] ##取URL 倒数第四至第九位 做图片的名字 img = requests.get(img_url, headers=headers) f = open(name+'.jpg', 'wb')##写入多媒体文件必须要 b 这个参数!!必须要!! f.write(img.content) ##多媒体文件要是用conctent哦! f.close() def mkdir(path): path = path.strip() isExists = os.path.exists(os.path.join("E:\mzitu", path)) if not isExists: print(u'建了一个名字叫做', path, u'的文件夹!') os.makedirs(os.path.join("E:\mzitu", path)) return True else: print(u'名字叫做', path, u'的文件夹已经存在了!') return False headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}##浏览器请求头(大部分网站没有这个请求头会报错、请务必加上哦) a=[]; a.append('/') #datafile = open('data.txt','w') for pagenum in range(2,77): a.append('/page/'+str(pagenum)) for pagenum in a: nexturl = 'http://www.mzitu.com/xinggan'+pagenum start_html = requests.get(nexturl, headers=headers) Soup = BeautifulSoup(start_html.text, 'html5lib') all_li = Soup.find('ul', id="pins").find_all('li') try: for li in all_li: #print(li.find('a')) #datafile.write(li.find('a')['href']+'\n'+li.find('a').find('img')['alt']+'\n\n') getimg(li.find('a')['href'], li.find('a').find('img')['alt']) print(str(pagenum)) except: print('error'+str(pagenum)) continue print(nexturl) #datafile.close()
其中的很多代码其实都参考了那篇帖子,甚至保留了一些批注。但最终还是实现了这个功能。
成果
兴趣是最好的老师!
必须的 [色]
都是精品呀,咋也不分享出来呢。
[坏笑] 文件太大,4个多G
山羊爷爷的萝卜丰收了,请小白兔和小黑兔来帮忙。收完萝卜后山羊爷爷分别送了两只小兔一些萝卜,小黑兔拿了萝卜走了,小白兔则说我不要萝卜,你送我些萝卜籽吧。
第二年小白兔还没等到萝卜长出来就饿死了。小黑兔吃完自己的萝卜,正好赶上小白兔的萝卜成熟,就收了,把自己养的胖胖的。这个故事告诉我们,考虑你奶奶个孙子的长远啊,潇洒一天是一天吧,整不好自己就没了!
你不给我萝卜,你给我个萝卜籽,你饿死我得了被,当谁都懂python呢。快,把你打包好的图片,弄个分享下载。哈哈哈哈哈哈哈哈哈哈