Python爬虫实战之抓取淘宝MM照片
程序员文章站
2022-05-29 10:09:37
本篇目标 1.抓取淘宝MM的姓名,头像,年龄 2.抓取每一个MM的资料简介以及写真图片 3.把每一个MM的写真图片按照文件夹保存到本地 4.熟悉文件保存的过程 1.URL的格式 在这里我们用到的URL是 http://mm.taobao.com/json/request_top_list.htm?p ......
本篇目标
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详情页面地址,姓名,年龄等等的信息打印出来,直接贴代码如下
1 ''' 2 在学习过程中有什么不懂得可以加我的 3 python学习交流扣扣qun,934109170 4 群里有不错的学习教程、开发工具与电子书籍。 5 与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容。 6 ''' 7 __author__ = 'cqc' 8 # -*- coding:utf-8 -*- 9 10 import urllib 11 import urllib2 12 import re 13 14 class spider: 15 16 def __init__(self): 17 self.siteurl = 'http://mm.taobao.com/json/request_top_list.htm' 18 19 def getpage(self,pageindex): 20 url = self.siteurl + "?page=" + str(pageindex) 21 print url 22 request = urllib2.request(url) 23 response = urllib2.urlopen(request) 24 return response.read().decode('gbk') 25 26 def getcontents(self,pageindex): 27 page = self.getpage(pageindex) 28 pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.s) 29 items = re.findall(pattern,page) 30 for item in items: 31 print item[0],item[1],item[2],item[3],item[4] 32 33 spider = spider() 34 spider.getcontents(1)
运行结果如下
2.文件写入简介
在这里,我们有写入图片和写入文本两种方式
1)写入图片
1 2 #传入图片地址,文件名,保存单张图片 3 def saveimg(self,imageurl,filename): 4 u = urllib.urlopen(imageurl) 5 data = u.read() 6 f = open(filename, 'wb') 7 f.write(data) 8 f.close()
2)写入文本
1 def savebrief(self,content,name): 2 filename = name + "/" + name + ".txt" 3 f = open(filename,"w+") 4 print u"正在偷偷保存她的个人信息为",filename 5 f.write(content.encode('utf-8'))
3)创建新目录
1 2 #创建新目录 3 def mkdir(self,path): 4 path = path.strip() 5 # 判断路径是否存在 6 # 存在 true 7 # 不存在 false 8 isexists=os.path.exists(path) 9 # 判断结果 10 if not isexists: 11 # 如果不存在则创建目录 12 # 创建目录操作函数 13 os.makedirs(path) 14 return true 15 else: 16 # 如果目录存在则不创建,并提示目录已存在 17 return false
3.代码完善
主要的知识点已经在前面都涉及到了,如果大家前面的章节都已经看了,完成这个爬虫不在话下,具体的详情在此不再赘述,直接帖代码啦。
1 2 __author__ = 'cqc' 3 # -*- coding:utf-8 -*- 4 5 import urllib 6 import urllib2 7 import re 8 import tool 9 import os 10 11 #抓取mm 12 class spider: 13 14 #页面初始化 15 def __init__(self): 16 self.siteurl = 'http://mm.taobao.com/json/request_top_list.htm' 17 self.tool = tool.tool() 18 19 #获取索引页面的内容 20 def getpage(self,pageindex): 21 url = self.siteurl + "?page=" + str(pageindex) 22 request = urllib2.request(url) 23 response = urllib2.urlopen(request) 24 return response.read().decode('gbk') 25 26 #获取索引界面所有mm的信息,list格式 27 def getcontents(self,pageindex): 28 page = self.getpage(pageindex) 29 pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.s) 30 items = re.findall(pattern,page) 31 contents = [] 32 for item in items: 33 contents.append([item[0],item[1],item[2],item[3],item[4]]) 34 return contents 35 36 #获取mm个人详情页面 37 def getdetailpage(self,infourl): 38 response = urllib2.urlopen(infourl) 39 return response.read().decode('gbk') 40 41 #获取个人文字简介 42 def getbrief(self,page): 43 pattern = re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.s) 44 result = re.search(pattern,page) 45 return self.tool.replace(result.group(1)) 46 47 #获取页面所有图片 48 def getallimg(self,page): 49 pattern = re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.s) 50 #个人信息页面所有代码 51 content = re.search(pattern,page) 52 #从代码中提取图片 53 patternimg = re.compile('<img.*?src="(.*?)"',re.s) 54 images = re.findall(patternimg,content.group(1)) 55 return images 56 57 58 #保存多张写真图片 59 def saveimgs(self,images,name): 60 number = 1 61 print u"发现",name,u"共有",len(images),u"张照片" 62 for imageurl in images: 63 splitpath = imageurl.split('.') 64 ftail = splitpath.pop() 65 if len(ftail) > 3: 66 ftail = "jpg" 67 filename = name + "/" + str(number) + "." + ftail 68 self.saveimg(imageurl,filename) 69 number += 1 70 71 # 保存头像 72 def saveicon(self,iconurl,name): 73 splitpath = iconurl.split('.') 74 ftail = splitpath.pop() 75 filename = name + "/icon." + ftail 76 self.saveimg(iconurl,filename) 77 78 #保存个人简介 79 def savebrief(self,content,name): 80 filename = name + "/" + name + ".txt" 81 f = open(filename,"w+") 82 print u"正在偷偷保存她的个人信息为",filename 83 f.write(content.encode('utf-8')) 84 85 86 #传入图片地址,文件名,保存单张图片 87 def saveimg(self,imageurl,filename): 88 u = urllib.urlopen(imageurl) 89 data = u.read() 90 f = open(filename, 'wb') 91 f.write(data) 92 print u"正在悄悄保存她的一张图片为",filename 93 f.close() 94 95 #创建新目录 96 def mkdir(self,path): 97 path = path.strip() 98 # 判断路径是否存在 99 # 存在 true 100 # 不存在 false 101 isexists=os.path.exists(path) 102 # 判断结果 103 if not isexists: 104 # 如果不存在则创建目录 105 print u"偷偷新建了名字叫做",path,u'的文件夹' 106 # 创建目录操作函数 107 os.makedirs(path) 108 return true 109 else: 110 # 如果目录存在则不创建,并提示目录已存在 111 print u"名为",path,'的文件夹已经创建成功' 112 return false 113 114 #将一页淘宝mm的信息保存起来 115 def savepageinfo(self,pageindex): 116 #获取第一页淘宝mm列表 117 contents = self.getcontents(pageindex) 118 for item in contents: 119 #item[0]个人详情url,item[1]头像url,item[2]姓名,item[3]年龄,item[4]居住地 120 print u"发现一位模特,名字叫",item[2],u"芳龄",item[3],u",她在",item[4] 121 print u"正在偷偷地保存",item[2],"的信息" 122 print u"又意外地发现她的个人地址是",item[0] 123 #个人详情页面的url 124 detailurl = item[0] 125 #得到个人详情页面代码 126 detailpage = self.getdetailpage(detailurl) 127 #获取个人简介 128 brief = self.getbrief(detailpage) 129 #获取所有图片列表 130 images = self.getallimg(detailpage) 131 self.mkdir(item[2]) 132 #保存个人简介 133 self.savebrief(brief,item[2]) 134 #保存头像 135 self.saveicon(item[1],item[2]) 136 #保存图片 137 self.saveimgs(images,item[2]) 138 139 #传入起止页码,获取mm图片 140 def savepagesinfo(self,start,end): 141 for i in range(start,end+1): 142 print u"正在偷偷寻找第",i,u"个地方,看看mm们在不在" 143 self.savepageinfo(i) 144 145 146 #传入起止页码即可,在此传入了2,10,表示抓取第2到10页的mm 147 spider = spider() 148 spider.savepagesinfo(2,10)
1 2 __author__ = 'cqc' 3 #-*- coding:utf-8 -*- 4 import re 5 6 #处理页面标签类 7 class tool: 8 #去除img标签,1-7位空格, 9 removeimg = re.compile('<img.*?>| {1,7}| ') 10 #删除超链接标签 11 removeaddr = re.compile('<a.*?>|</a>') 12 #把换行的标签换为\n 13 replaceline = re.compile('<tr>|<div>|</div>|</p>') 14 #将表格制表<td>替换为\t 15 replacetd= re.compile('<td>') 16 #将换行符或双换行符替换为\n 17 replacebr = re.compile('<br><br>|<br>') 18 #将其余标签剔除 19 removeextratag = re.compile('<.*?>') 20 #将多行空行删除 21 removenoneline = re.compile('\n+') 22 def replace(self,x): 23 x = re.sub(self.removeimg,"",x) 24 x = re.sub(self.removeaddr,"",x) 25 x = re.sub(self.replaceline,"\n",x) 26 x = re.sub(self.replacetd,"\t",x) 27 x = re.sub(self.replacebr,"\n",x) 28 x = re.sub(self.removeextratag,"",x) 29 x = re.sub(self.removenoneline,"\n",x) 30 #strip()将前后多余内容删除 31 return x.strip()
以上两个文件就是所有的代码内容,运行一下试试看,那叫一个酸爽啊
看看文件夹里面有什么变化
不知不觉,海量的mm图片已经进入了你的电脑,还不快快去试试看!!
上一篇: MySQL数据库的特点和优势
下一篇: pymysql模块