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

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

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

网上看到有获取淘宝MM照片的python程序,于是自己也忍不住照着学习一下

不得不说,淘宝网站的网页有所变化,只是纯粹把之前网上的程序down下来,程序还真的运行不起来。

有鉴于此,这里就使用新的方法来重新编码,获取淘宝MM的图片

思路是 访问主页面    获取当前页面每一个模特的主页url,  在模特的主页 获取个人信息以及头像保存好,同时获取个人相册地址

在个人相册获取相册数量,获取每一个相册名字以及该相册的照片数量,进入每一个相册获取每一个相册的相片地址

1.获取入口地址

#!/usr/bin/python
#coding=utf-8
__author__ = 'Jimy_fengqi'from selenium import webdriverimport sys
reload(sys)
sys.setdefaultencoding('utf-8')class TaoBaoSpider:def __init__(self):#自定义页面起始页self.page=1#定义存储的文件夹名字self.dirName='Jimy_fengqi'#创建webdriver全局变量self.driver = webdriver.PhantomJS()#页面加载入口 def getContent(self,maxPage):for index in range(1,maxPage+1):print '当前是第%d页' % indexself.getMMurl(index)self.driver.quit()#获取页面内容,同时找到MM的个人主页入口def getMMurl(self,index):url="https://mm.taobao.com/json/request_top_list.htm?page="+str(index)#获取页面内容self.driver.get(url)#找到当前页面所有的个人主页入口,通过xpath的方式来匹配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")mmUrls.append(MMurl)print MMurlspider=TaoBaoSpider()
spider.getContent(1)

结果如下:

当前是第1页
https://mm.taobao.com/self/model_info.htm?user_id=687471686
https://mm.taobao.com/self/model_info.htm?user_id=405095521
https://mm.taobao.com/self/model_info.htm?user_id=631300490
https://mm.taobao.com/self/model_info.htm?user_id=414457129
https://mm.taobao.com/self/model_info.htm?user_id=141234233
https://mm.taobao.com/self/model_info.htm?user_id=96614110
https://mm.taobao.com/self/model_info.htm?user_id=37448401
https://mm.taobao.com/self/model_info.htm?user_id=74386764
https://mm.taobao.com/self/model_info.htm?user_id=523216808
https://mm.taobao.com/self/model_info.htm?user_id=46599595

2.加载MM的个人主页

接着上面的函数继续写就OK了,代码如下:
#!/usr/bin/python
#coding=utf-8
__author__ = 'Jimy_fengqi'import urllib2,re,os,datetime,sys,time
from selenium import webdriver
from bs4 import BeautifulSoup as BSreload(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 getContent(self,maxPage):for index in range(1,maxPage+1):print '当前是第%d页' % indexself.getMMurl(index)self.driver.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")mmUrls.append(MMurl)print MMurlself.getMMdetail(MMurl)#获取个人页面详情       def getMMdetail(self,mmUrl):self.driver.get(mmUrl)print self.driver.current_url
spider=TaoBaoSpider()
spider.getContent(1)

代码逻辑什么的也挺合理的,但是现在问题来了,代码运行之后,显示如下:

当前是第1页
https://mm.taobao.com/self/model_info.htm?user_id=687471686
https://mm.taobao.com/self/model_info.htm?user_id=687471686
Traceback (most recent call last):File "12.get_taobao_pic.py", line 49, in <module>spider.getContent(1)File "12.get_taobao_pic.py", line 27, in getContentself.getMMurl(index)File "12.get_taobao_pic.py", line 39, in getMMurlMMurl= item.get_attribute('href').replace("model_card","model_info")File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 141, in get_attributeresp = self._execute(Command.GET_ELEMENT_ATTRIBUTE, {'name': name})File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 494, in _executereturn self._parent.execute(command, params)File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in executeself.error_handler.check_response(response)File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_responseraise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: {"errorMessage":"Element does not exist in cache","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:46191","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"GET","url":"/attribute/href","urlParsed":{"anchor":"","query":"","file":"href","directory":"/attribute/","path":"/attribute/href","relative":"/attribute/href","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/attribute/href","queryKey":{},"chunks":["attribute","href"]},"urlOriginal":"/session/810afa50-0ab8-11e7-bd22-c72625d9ecf4/element/:wdc:1489717323088/attribute/href"}}
Screenshot: available via screen

什么意思呢?

其实原因是这样的,当在函数 getMMdetail里面再次使用 self.driver来访问页面的时候, 之前的那个页面没有退出呢,因此造成了页面的访问冲突

我们可以再次定义一个webdriver来访问新的页面

 def getMMdetail(self,mmUrl):self.driver_detail.get(mmUrl)print self.driver_detail.current_url

这样就能正常访问了

3.获取个人信息

个人主页能够访问了,那么我们接下来就获取MM的一些个人信息了
   def getMMdetail(self,mmUrl):#获取个人页面详情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'

通过这个函数,就捕获到了MM的名字, 个人头像,和她的个人简介

4.保存信息

信息获取完毕,就开始将捕获到的信息,保存下来
整体代码如下:
#!/usr/bin/python
#coding=utf-8
__author__ = 'Jimy_fengqi'import re,os,datetime,sys,time,urllib
from selenium import webdriver
from bs4 import BeautifulSoup as BSreload(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):if is_print:print contentelse:return#页面加载入口  def getContent(self,maxPage):for index in range(1,maxPage+1):self.my_print(1,u'当前是第%d页' % index)self.getMMurl(index)self.driver.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")mmUrls.append(MMurl)#print MMurlself.getMMdetail(MMurl)#获取个人页面详情      def getMMdetail(self,mmUrl):#获取个人页面详情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.saveBriefInfo(name,mmicon,str(brief),mmUrl)def saveBriefInfo(self,name,mmicon,brief,mmUrl):path=self.dirName+'/'+namepath=path.strip()#创建目录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)return pathif __name__ == '__main__':print ''''' ***************************************** **    Welcome to Spider for TaobaoMM   ** **      Created on 2017-3-17           ** **      @author: Jimy_fengqi           ** *****************************************'''    spider=TaoBaoSpider()spider.getContent(1)

运行结果:

            ***************************************** **    Welcome to Spider for TaobaoMM   ** **      Created on 2017-3-15           ** **      @author: Jimy_fengqi           ** *****************************************
当前是第1页
发现一位MM 名字叫田媛媛 坐标https://mm.taobao.com/self/model_info.htm?user_id=687471686 正在爬取。。。
正在保存田媛媛的个人信息到Jimy_fengqi/田媛媛
发现一位MM 名字叫v悦悦 坐标https://mm.taobao.com/self/model_info.htm?user_id=405095521 正在爬取。。。
正在保存v悦悦的个人信息到Jimy_fengqi/v悦悦
发现一位MM 名字叫崔辰辰 坐标https://mm.taobao.com/self/model_info.htm?user_id=631300490 正在爬取。。。
正在保存崔辰辰的个人信息到Jimy_fengqi/崔辰辰
发现一位MM 名字叫大猫儿 坐标https://mm.taobao.com/self/model_info.htm?user_id=414457129 正在爬取。。。
正在保存大猫儿的个人信息到Jimy_fengqi/大猫儿
发现一位MM 名字叫金甜甜 坐标https://mm.taobao.com/self/model_info.htm?user_id=141234233 正在爬取。。。
正在保存金甜甜的个人信息到Jimy_fengqi/金甜甜
发现一位MM 名字叫紫轩 坐标https://mm.taobao.com/self/model_info.htm?user_id=96614110 正在爬取。。。
正在保存紫轩的个人信息到Jimy_fengqi/紫轩
发现一位MM 名字叫谢婷婷 坐标https://mm.taobao.com/self/model_info.htm?user_id=37448401 正在爬取。。。
正在保存谢婷婷的个人信息到Jimy_fengqi/谢婷婷
发现一位MM 名字叫夏晨洁 坐标https://mm.taobao.com/self/model_info.htm?user_id=74386764 正在爬取。。。
正在保存夏晨洁的个人信息到Jimy_fengqi/夏晨洁
发现一位MM 名字叫Cherry 坐标https://mm.taobao.com/self/model_info.htm?user_id=523216808 正在爬取。。。
正在保存Cherry的个人信息到Jimy_fengqi/Cherry
发现一位MM 名字叫雪倩nika 坐标https://mm.taobao.com/self/model_info.htm?user_id=46599595 正在爬取。。。
正在保存雪倩nika的个人信息到Jimy_fengqi/雪倩nika

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. 算法工程师落地_模型的更新升级能力
  2. 你觉得 ThreadLocalRandom 这玩意真的安全吗?
  3. Jenkins+maven(testng)项目(本地项目配置)
  4. 三万字整理深度匹配模型
  5. fmea第五版pfmea表格_FMEA第五版中文版.pdf
  6. SPSS 百度网盘免费下载
  7. 用matlab求傅里叶变换
  8. php ctype xdigit,PHP中的ctype_xdigit()函数
  9. EMD EEMD CEEMD CEEMDAN IEEMDAN 附赠EEMD代码
  10. 数学建模——层次分析法,一致性检验学习笔记,matlab代码实现(二)
  11. 5分绩点转4分_5分绩点转4分
  12. Merkle tree proof
  13. 转载(工信部):张欣 辽宁奇辉电子系统工程有限公司
  14. rs485九针头_如何在开放源代码中移动针头
  15. 数据结构和算法之二叉树左视图
  16. 规则引擎drools系列(一)
  17. macbook 如何在开盖的情况下连接外接显示器, 同时 macbook 的键盘和触摸板都能工作
  18. ShareSDK iOS端微信如何获取authcode值
  19. 离散小波matlab程序,三维离散小波变换matlab实现.pdf
  20. 外企面试最常见的八大英文问题

热门文章

  1. 计算机网络第七版第三章数据链路层笔记
  2. Facebook三大黑料
  3. java基础梳理--朝花夕拾(二)
  4. 【学习日志】2022.08.19 计算机图形学、OpenGL、疼迅云游戏引擎面试、GLAD、GLFW、virtual
  5. DSPE-PEG5-COOH分子式:C54H104NO16P可与伯胺基反应的反应性磷脂PEG共轭物之一
  6. python 多线程报错An attempt has been made to start a new process before the current process has finished
  7. 万亿二手车金融市场,如何在寒冬中成为现象级企业
  8. 安装Ubuntu, 使用guile
  9. 百度ueditor - 支持word上传的富文本编辑器
  10. 嵌入式软件场景式开发——通信和PID控制