Python爬虫实战(4):抓取淘宝MM照片
2016-01-25 09:48
931 查看
Python爬虫入门(1):综述
Python爬虫入门(2):爬虫基础了解
Python爬虫入门(3):Urllib库的基本使用
Python爬虫入门(4):Urllib库的高级用法
Python爬虫入门(5):URLError异常处理
Python爬虫入门(6):Cookie的使用
Python爬虫入门(7):正则表达式
Python爬虫入门(8):Beautiful
Soup的用法
Python爬虫实战(1):爬取糗事百科段子
Python爬虫实战(2):百度贴吧帖子
Python爬虫实战(3):计算大学本学期绩点
Python爬虫实战(3):计算大学本学期绩点
Python爬虫实战(5):模拟登录淘宝并获取所有订单
福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢?
1.抓取淘宝MM的姓名,头像,年龄
2.抓取每一个MM的资料简介以及写真图片
3.把每一个MM的写真图片按照文件夹保存到本地
4.熟悉文件保存的过程
在这里我们用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,问号前面是基地址,后面的参数page是代表第几页,可以随意更换地址。点击开之后,会发现有一些淘宝MM的简介,并附有超链接链接到个人详情页面。
我们需要抓取本页面的头像地址,MM姓名,MM年龄,MM居住地,以及MM的个人详情页面地址。
相信大家经过上几次的实战,对抓取和提取页面的地址已经非常熟悉了,这里没有什么难度了,我们首先抓取本页面的MM详情页面地址,姓名,年龄等等的信息打印出来,直接贴代码如下
Python
运行结果如下
Python
主要的知识点已经在前面都涉及到了,如果大家前面的章节都已经看了,完成这个爬虫不在话下,具体的详情在此不再赘述,直接帖代码啦。
Python
Python
Python
Python
以上两个文件就是所有的代码内容,运行一下试试看,那叫一个酸爽啊
看看文件夹里面有什么变化
不知不觉,海量的MM图片已经进入了你的电脑,还不快快去试试看!!
代码均为本人所敲,写的不好,大神勿喷,写来方便自己,同时分享给大家参考!希望大家支持!
from: 崔庆才的博客(@崔庆才丨静觅)
http://python.jobbole.com/81359/
Python爬虫入门(2):爬虫基础了解
Python爬虫入门(3):Urllib库的基本使用
Python爬虫入门(4):Urllib库的高级用法
Python爬虫入门(5):URLError异常处理
Python爬虫入门(6):Cookie的使用
Python爬虫入门(7):正则表达式
Python爬虫入门(8):Beautiful
Soup的用法
Python爬虫实战(1):爬取糗事百科段子
Python爬虫实战(2):百度贴吧帖子
Python爬虫实战(3):计算大学本学期绩点
Python爬虫实战(3):计算大学本学期绩点
Python爬虫实战(5):模拟登录淘宝并获取所有订单
福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢?
本篇目标
1.抓取淘宝MM的姓名,头像,年龄2.抓取每一个MM的资料简介以及写真图片
3.把每一个MM的写真图片按照文件夹保存到本地
4.熟悉文件保存的过程
1.URL的格式
在这里我们用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,问号前面是基地址,后面的参数page是代表第几页,可以随意更换地址。点击开之后,会发现有一些淘宝MM的简介,并附有超链接链接到个人详情页面。我们需要抓取本页面的头像地址,MM姓名,MM年龄,MM居住地,以及MM的个人详情页面地址。
2.抓取简要信息
相信大家经过上几次的实战,对抓取和提取页面的地址已经非常熟悉了,这里没有什么难度了,我们首先抓取本页面的MM详情页面地址,姓名,年龄等等的信息打印出来,直接贴代码如下Python
12345678910111213141516171819202122232425262728 | __author__ = 'CQC'# -*- coding:utf-8 -*- import urllibimport urllib2import re class Spider: def __init__(self): self.siteURL = 'http://mm.taobao.com/json/request_top_list.htm' def getPage(self,pageIndex): url = self.siteURL + "?page=" + str(pageIndex) print url request = urllib2.Request(url) response = urllib2.urlopen(request) return response.read().decode('gbk') def getContents(self,pageIndex): page = self.getPage(pageIndex) pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S) items = re.findall(pattern,page) for item in items: print item[0],item[1],item[2],item[3],item[4] spider = Spider()spider.getContents(1) |
2.文件写入简介
在这里,我们有写入图片和写入文本两种方式1)写入图片
Python1 2 3 4 5 6 7 | 运行结果如下 QQ截图20150220234132 2.文件写入简介 在这里,我们有写入图片和写入文本两种方式 1)写入图片 |
2)写入文本
Python12345 | def saveBrief(self,content,name): fileName = name + "/" + name + ".txt" f = open(fileName,"w+") print u"正在偷偷保存她的个人信息为",fileName f.write(content.encode('utf-8')) |
3)创建新目录
Python1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #创建新目录 defmkdir(self,path): path=path.strip() # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 ifnotisExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs(path) returnTrue else: # 如果目录存在则不创建,并提示目录已存在 returnFalse |
3.代码完善
主要的知识点已经在前面都涉及到了,如果大家前面的章节都已经看了,完成这个爬虫不在话下,具体的详情在此不再赘述,直接帖代码啦。Python
1 | spider.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | __author__='CQC' # -*- coding:utf-8 -*- importurllib importurllib2 importre importtool importos #抓取MM classSpider: #页面初始化 def__init__(self): self.siteURL='http://mm.taobao.com/json/request_top_list.htm' self.tool=tool.Tool() #获取索引页面的内容 defgetPage(self,pageIndex): url=self.siteURL+"?page="+str(pageIndex) request=urllib2.Request(url) response=urllib2.urlopen(request) returnresponse.read().decode('gbk') #获取索引界面所有MM的信息,list格式 defgetContents(self,pageIndex): page=self.getPage(pageIndex) pattern=re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S) items=re.findall(pattern,page) contents=[] foriteminitems: contents.append([item[0],item[1],item[2],item[3],item[4]]) returncontents #获取MM个人详情页面 defgetDetailPage(self,infoURL): response=urllib2.urlopen(infoURL) returnresponse.read().decode('gbk') #获取个人文字简介 defgetBrief(self,page): pattern=re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.S) result=re.search(pattern,page) returnself.tool.replace(result.group(1)) #获取页面所有图片 defgetAllImg(self,page): pattern=re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.S) #个人信息页面所有代码 content=re.search(pattern,page) #从代码中提取图片 patternImg=re.compile('<img.*?src="(.*?)"',re.S) images=re.findall(patternImg,content.group(1)) returnimages #保存多张写真图片 defsaveImgs(self,images,name): number=1 printu"发现",name,u"共有",len(images),u"张照片" forimageURLinimages: splitPath=imageURL.split('.') fTail=splitPath.pop() iflen(fTail)>3: fTail="jpg" fileName=name+"/"+str(number)+"."+fTail self.saveImg(imageURL,fileName) number+=1 # 保存头像 defsaveIcon(self,iconURL,name): splitPath=iconURL.split('.') fTail=splitPath.pop() fileName=name+"/icon."+fTail self.saveImg(iconURL,fileName) #保存个人简介 defsaveBrief(self,content,name): fileName=name+"/"+name+".txt" f=open(fileName,"w+") printu"正在偷偷保存她的个人信息为",fileName f.write(content.encode('utf-8')) #传入图片地址,文件名,保存单张图片 defsaveImg(self,imageURL,fileName): u=urllib.urlopen(imageURL) data=u.read() f=open(fileName,'wb') f.write(data) printu"正在悄悄保存她的一张图片为",fileName f.close() #创建新目录 defmkdir(self,path): path=path.strip() # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 ifnotisExists: # 如果不存在则创建目录 printu"偷偷新建了名字叫做",path,u'的文件夹' # 创建目录操作函数 os.makedirs(path) returnTrue else: # 如果目录存在则不创建,并提示目录已存在 printu"名为",path,'的文件夹已经创建成功' returnFalse #将一页淘宝MM的信息保存起来 defsavePageInfo(self,pageIndex): #获取第一页淘宝MM列表 contents=self.getContents(pageIndex) foritemincontents: #item[0]个人详情URL,item[1]头像URL,item[2]姓名,item[3]年龄,item[4]居住地 printu"发现一位模特,名字叫",item[2],u"芳龄",item[3],u",她在",item[4] printu"正在偷偷地保存",item[2],"的信息" printu"又意外地发现她的个人地址是",item[0] #个人详情页面的URL detailURL=item[0] #得到个人详情页面代码 detailPage=self.getDetailPage(detailURL) #获取个人简介 brief=self.getBrief(detailPage) #获取所有图片列表 images=self.getAllImg(detailPage) self.mkdir(item[2]) #保存个人简介 self.saveBrief(brief,item[2]) #保存头像 self.saveIcon(item[1],item[2]) #保存图片 self.saveImgs(images,item[2]) #传入起止页码,获取MM图片 defsavePagesInfo(self,start,end): foriinrange(start,end+1): printu"正在偷偷寻找第",i,u"个地方,看看MM们在不在" self.savePageInfo(i) #传入起止页码即可,在此传入了2,10,表示抓取第2到10页的MM spider=Spider() spider.savePagesInfo(2,10) |
1 | tool.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | __author__='CQC' #-*- coding:utf-8 -*- importre #处理页面标签类 classTool: #去除img标签,1-7位空格, removeImg=re.compile('<img.*?>| {1,7}| ') #删除超链接标签 removeAddr=re.compile('<a.*?>|</a>') #把换行的标签换为\n replaceLine=re.compile('<tr>|<div>|</div>|</p>') #将表格制表<td>替换为\t replaceTD=re.compile('<td>') #将换行符或双换行符替换为\n replaceBR=re.compile('<br><br>|<br>') #将其余标签剔除 removeExtraTag=re.compile('<.*?>') #将多行空行删除 removeNoneLine=re.compile('\n+') defreplace(self,x): x=re.sub(self.removeImg,"",x) x=re.sub(self.removeAddr,"",x) x=re.sub(self.replaceLine,"\n",x) x=re.sub(self.replaceTD,"\t",x) x=re.sub(self.replaceBR,"\n",x) x=re.sub(self.removeExtraTag,"",x) x=re.sub(self.removeNoneLine,"\n",x) #strip()将前后多余内容删除 returnx.strip() |
看看文件夹里面有什么变化
不知不觉,海量的MM图片已经进入了你的电脑,还不快快去试试看!!
代码均为本人所敲,写的不好,大神勿喷,写来方便自己,同时分享给大家参考!希望大家支持!
from: 崔庆才的博客(@崔庆才丨静觅)
http://python.jobbole.com/81359/
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- 爬虫笔记
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- python废话三:变量:局部变量和全局变量