python爬虫(14)获取淘宝MM个人信息及照片(中)


python爬虫(14)获取淘宝MM个人信息及照片(上)

python爬虫(14)获取淘宝MM个人信息及照片(下)(windows版本)

在上篇文章中,已经有了基本的爬取策略,这一篇,直接就是整个爬去淘宝MM的所有内容

不过本文也有几个缺点:

1.只是利用单线程爬去,所以爬取比较慢

2.没有设置控制功能

3.缺少选择功能

4.没有图形显示功能

但是用这个代码拿来练手,或者学习爬虫的逻辑思维是很不错的选择

代码如下:

#!/usr/bin/python
#coding=utf-8
__author__ = 'Jimy_fengqi'import os,sys,time,urllib,uuid
from selenium import webdriverreload(sys)
sys.setdefaultencoding('utf-8')class TaoBaoSpider:def __init__(self):#自定义页面起始页self.page=1#定义存储的文件夹名字self.dirName='Jimy_fengqi'#创建两个webdriver,防止后续页面抢资源,一个顾不过来self.driver = webdriver.PhantomJS()self.driver_detail=webdriver.PhantomJS()#自定义打印函数def my_print(self,is_print,content):#通过变量is_print决定是否打印logif is_print:print contentelse:return#页面加载入口    def getContent(self,maxPage):#根据传入的maxPage爬取指定的页面数量for index in range(1,maxPage+1):self.my_print(1,u'正在爬取第%d页' % index)self.getMMurl(index)self.driver.quit()self.driver_detail.quit()#获取页面内容,同时找到MM的个人主页入口def getMMurl(self,index):url="https://mm.taobao.com/json/request_top_list.htm?page="+str(index)#获取页面内容self.driver.get(url)#找到当前页面所有的个人主页入口items=self.driver.find_elements_by_xpath('//div[@class="list-item"]/div[1]/div[1]/p/a')mmUrls=[]for item in items:#对获得到的url进行处理,否则将会访问到错误的页面MMurl= item.get_attribute('href').replace("model_card","model_info")#将获得到的MM主页地址存贮并传到下一个函数中处理mmUrls.append(MMurl)#print MMurl#获取个人页面详情self.getMMdetail(MMurl)#获取个人页面详情        def getMMdetail(self,mmUrl):#获取MM个人主页的网页内容self.driver_detail.get(mmUrl)self.my_print(0,self.driver_detail.current_url)#获取MM名字name=self.driver_detail.find_element_by_xpath('//div[@class="mm-p-model-info-left-top"]/dl/dd/a').textself.my_print(1,u'发现一位MM 名字叫 %s 坐标 %s 正在爬取...' % (name,mmUrl))#获取MM个人头像地址mmicon=self.driver_detail.find_element_by_xpath('//div[@class="mm-p-model-info-left-top"]/dl/dt/a/img').get_attribute('src')self.my_print(0, mmicon)#获取个人简介信息base_msg=self.driver_detail.find_elements_by_xpath('//div[@class="mm-p-info mm-p-base-info"]/ul/li')  brief=''for item in base_msg:brief+=item.text+'\n'#保存信息path=self.dirName+'/'+namepath=path.strip()    self.saveBriefInfo(path,name,mmicon,str(brief),mmUrl)#获取相册地址,并跳转过去images_url=self.driver_detail.find_element_by_xpath('//ul[@class="mm-p-menu"]//a').get_attribute('href')self.my_print(1,'个人相册地址是:%s' % images_url)#获取所有的相册地址,以及相册名字album_urls_and_name=self.getAllAlum(images_url,name)#获取单个相册内所有的图片地址,并将起存贮起来img_urls=self.getSingelAlumImageUrl(album_urls_and_name,path)#判断是否是到达最后一页相册def isEndPage(self):try:#判断是否到达最后一页,最后一页只有通过下面的表达式会找到,因此不到最后一页将找不到,代码就会走到except语句nextpages=self.driver.find_element_by_xpath('//div[@class="pagination"]/a[@class="page-end"]')self.my_print(1, u"已经到达最后一页")return Noneexcept:return 1#获取个人相册当前页面下一页内容   def getPage(self):try:#获取下一页的位置元素,通过click的方法能够到达下一页nextpages=self.driver_detail.find_element_by_xpath('//div[@class="pagination"]/a[@class="page-next J_AjaxifyTrigger"]')return nextpagesexcept:self.my_print(1, u"相册爬取完毕。。。")return None#获取所有的相册地址,以及相册名字def getAllAlum(self,images_url,name):try:#定义存贮相册地址url和相册名字的变量album_urls_and_name=[]self.driver_detail.get(images_url)#定义相册页面album_num_page=1#定义相册数量album_num=1while self.isEndPage():#如果相册页面到达最后一页就退出if album_num_page == 0:break;#获取当前页面内的相册photos=self.driver_detail.find_elements_by_xpath('//div[@class="mm-photo-cell"]/div/h4/a')for alum_url in photos:#临时变量,存贮相册地址url和相册名字的变量url_name={}#获取相册地址urlalbum_url=alum_url.get_attribute('href')#获取相册名字url_name['album_name']= alum_url.text#self.my_print(1,u'发现第%d个相册:%s' % (album_num,url_name['album_name']))#将相册地址url,相册名字,第几个相册放入变量中,以作后续处理url_name['url']=album_url#相册地址url_name['album_num']=album_num_page#相册在第几页url_name['url_album_name']=name#MM 的名字album_urls_and_name.append(url_name)album_num+=1#当前页面获取完毕,继续获取下一个页面的相册album_num_page +=1 #获取个人相册当前页面下一页内容                nextpages=self.getPage()#到达最后一页就将相册页面重置为0,否则通过点击事件进入下一个页面if nextpages == None:album_num_page = 0else:nextpages.click()#将获取到的内容返回return album_urls_and_nameexcept Exception,e:self.my_print(1,e)#获取单个相册内所有的图片地址   def getSingelAlumImageUrl(self,album_urls_and_name,path):#定义全局变量,存贮照片地址rulimg_urls=[]#获取相册数量album_len=len(album_urls_and_name)self.my_print(1,u'总共发现%d个相册' % album_len)#如果相册数额为空,直接返回if not album_len:self.my_print(1,u'这个MM很懒,一个相册都没有')#遍历每一个相册for sigelmm in album_urls_and_name:#获取单个相册页面内容self.driver_detail.get(sigelmm['url'])#防止页面没有加载完毕,这样就能获得当前页面所有的照片js = "var q=document.body.scrollTop=100000" for i in range(10):self.driver_detail.execute_script(js)time.sleep(0.1)#得到当前页面所有的照片images_all=self.driver_detail.find_elements_by_xpath('//div[@class="mm-photoW-cell-middle"]/div/a/img')self.my_print(1, (sigelmm['url']+str(len(images_all))))#定义相册地址img_path=path+'/'+str(sigelmm['album_num'])+'/'+sigelmm['album_name']self.my_print(1,img_path)#创建相册目录if not os.path.exists(img_path):os.makedirs(img_path)#遍历所有的照片,并进行存贮img_count=1for imgurl in images_all:#获得每一张照片的地址imgurl= imgurl.get_attribute('src')#print imgurl#为每一张照片命名filename =img_path+"/%s.jpg" % str(uuid.uuid1())img_urls.append(imgurl)#存贮每一个照片urllib.urlretrieve(imgurl, filename)#将图片下载到指定路径中#防止照片存贮错误,休眠0.1stime.sleep(0.1)self.my_print(1,'保存%s的%s相册中的的第%s个图片到\t%s\t完毕' % (sigelmm['url_album_name'],sigelmm['album_name'],img_count,img_path))img_count +=1return img_urls#保存信息def saveBriefInfo(self,path,name,mmicon,brief,mmUrl):#创建目录try:if not os.path.exists(path):os.makedirs(path)#保存个人头像iconpath=path+'/'+name+'.jpg'urllib.urlretrieve(mmicon, iconpath)#保存个人简介信息到文本中fileName=path+'/'+name+'.txt'with open(fileName,'w+') as f:self.my_print(1,u'正在保存%s的个人信息到%s'%(name,path))f.write(brief.encode('utf-8'))mmLocation=u"个人主页地址为:" + mmUrlf.write(mmLocation)except Exception,e:self.my_print(1,e)return Falsereturn Trueif __name__ == '__main__':print ''''***************************************** **    Welcome to Spider for TaobaoMM   ** **      Created on 2017-3-17           ** **      @author: Jimy_fengqi           ** *****************************************http://blog.csdn.net/qiqiyingse/article/details/62894826''' spider=TaoBaoSpider()spider.getContent(1)

运行结果:

            ***************************************** **    Welcome to Spider for TaobaoMM   ** **      Created on 2017-3-17           ** **      @author: Jimy_fengqi           ** *****************************************
正在爬取第1页
发现一位MM 名字叫 田媛媛 坐标 https://mm.taobao.com/self/model_info.htm?user_id=687471686 正在爬取...
正在保存田媛媛的个人信息到Jimy_fengqi/田媛媛
个人相册地址是:https://mm.taobao.com/self/model_album.htm?user_id=687471686
相册爬取完毕。。。
总共发现59个相册
https://mm.taobao.com/self/album_photo.htm?user_id=687471686&album_id=10000702574&album_flag=045
Jimy_fengqi/田媛媛/1/2016年春夏韩国...
保存田媛媛的2016年春夏韩国...相册中的的第1个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第2个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第3个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第4个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第5个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第6个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第7个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第8个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第9个图片到   Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第10个图片到  Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第11个图片到  Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第12个图片到  Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕
保存田媛媛的2016年春夏韩国...相册中的的第13个图片到  Jimy_fengqi/田媛媛/1/2016年春夏韩国...  完毕

后续增加 exe程序

python爬虫(14)获取淘宝MM个人信息及照片(中)相关推荐

  1. python爬虫(14)获取淘宝MM个人信息及照片(上)

    python爬虫(14)获取淘宝MM个人信息及照片(上) python爬虫(14)获取淘宝MM个人信息及照片(中) python爬虫(14)获取淘宝MM个人信息及照片(下)(windows版本) 网上 ...

  2. Python爬虫之获取淘宝商品数据

    爬取淘宝信息数据 首先需要先导入webdriver from selenium import webdriver webdriver支持主流的浏览器,比如说:谷歌浏览器.火狐浏览器.IE浏览器等等 然 ...

  3. Python爬虫之获取淘宝商品信息

    首先需要先导入webdriver from selenium import webdriver 复制代码 webdriver支持主流的浏览器,比如说:谷歌浏览器.火狐浏览器.IE浏览器等等 然后可以创 ...

  4. 简单使用Python爬虫爬取淘宝网页商品信息

    最近在学习爬虫,本人还是入门级的小白,自己跟着老师写了一些代码,算是自己的总结,还有一些心得,跟大家分享一下,如果不当,还请各位前辈斧正. 这是代码: # 导入库 import requests im ...

  5. 网络爬虫爬取淘宝页面商品信息

    网络爬虫爬取淘宝页面商品信息 最近在MOOC上看嵩老师的网络爬虫课程,按照老师的写法并不能进行爬取,遇到了一个问题,就是关于如何"绕开"淘宝登录界面,正确的爬取相关信息.通过百度找 ...

  6. Python爬虫实例之淘宝商品比价定向爬取!爬虫还是很有意思的!

    这次就模仿之前做的总结进行初次尝试 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格 理解:获取淘宝的搜索接口淘宝页面的翻页处理 技术路线:requests--re 准备工作 获取淘宝搜索商品的 ...

  7. 【Python爬虫学习】淘宝商品比价爬虫实战

    功能描述 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格. 技术路线:requests­ re 程序的结构设计 步骤1:提交商品搜索请求,循环获取页面 步骤2:对于每个页面,提取商品名称和价格 ...

  8. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)

    关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...

  9. python +selenium 爬取淘宝网商品信息

    前几天用python爬取豆瓣关于电影<长城>的影评,发现豆瓣的网页是静态的,心中一阵窃喜.以为对于动态网页了解的不是太多.但是主要是用cookie加headers爬取的.效果还不错,爬取了 ...

最新文章

  1. FPGA 控制 FLASH 之 Startup 原语使用相关链接
  2. php sina ip api,新浪调ip地址api
  3. 洛谷 1072 Hankson 的趣味题——质因数界限讨论
  4. 无限驾驶汉化后黑屏问题
  5. mcse 2000 认证介绍
  6. QML 界面切换的几种方法
  7. python+Django学习资源汇总-更新中
  8. Siddhi : Siddhi maven 仓库
  9. SQL_server 数据库备份信息查看
  10. jscript对URL参数进行编码与解码
  11. 用CSS实现花里胡哨的按钮切换效果
  12. TI DSP 5502定时器使用
  13. npm ERR! extraneous:的解决方案
  14. 对比深度学习十大框架
  15. 成品入库过账bapi
  16. 机器学习数学基础——全概率公式与贝叶斯公式
  17. Prim算法java实现
  18. 互联网公司的中台实践:网易杭研的中台往事
  19. 跑马拉松遇到抽筋(原因及应对方法)
  20. Ajax Upload上传图片失败的解决方法:

热门文章

  1. 样本选择模型 处理效应模型
  2. 南京财经大学计算机考研学费,2018年南京财经大学非全日制研究生学费与学制...
  3. CSDN 4月付费专栏榜单
  4. Latex文末插入作者照片简介方法全
  5. ASEMI整流桥GBU1510参数,GBU1510规格,GBU1510封装
  6. 初识EMC元器件(七)——差模电感的参数解读及选型应用
  7. torch.nn.Unfold类
  8. Python综合评价模型(五)专家评分法
  9. 关于win7系统注册表权限usbstor和superCMD
  10. 【CSS3】设置背景样式