环境

操作系统:CentOS 6.7 32-bit

Python版本:2.6.6

第三方插件

selenium

PhantomJS

BeautifulSoup

代码

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding('utf-8')
  5. '''
  6. 作者:昨夜星辰
  7. '''
  8. import re
  9. import os
  10. import time
  11. import shutil
  12. import requests
  13. import subprocess
  14. from bs4 import BeautifulSoup
  15. from selenium import webdriver
  16.  
  17. # 拼接url
  18. def joint_url(string):
  19. return 'https:' + string
  20.  
  21. # 判断文件夹是否存在,如果存在就删除,否则就创建。
  22. def create_folder(path):
  23. if os.path.exists(path):
  24. if os.path.isdir(path):
  25. shutil.rmtree(path)
  26. else:
  27. os.remove(path)
  28. os.mkdir(path)
  29.  
  30. root_folder = '淘女郎'
  31. create_folder(root_folder)
  32. url = 'https://mm.taobao.com/json/request_top_list.htm?page=1'
  33. browser = webdriver.PhantomJS()
  34. browser.get(url)
  35. bs = BeautifulSoup(browser.page_source, 'lxml')
  36. for top in bs('p', 'top'):
  37. mm_url = joint_url(top.find('a')['href'])
  38. mm_name = top.find('a').text
  39. mm_age = top.find('em').text
  40. mm_city = top.find('span').text
  41. mm_folder = '%s/%s' % (root_folder, mm_name)
  42. create_folder(mm_folder)
  43. print '发现一位美眉,她叫做%s,今年%s,住在%s,现在开始爬取她的个人页面……' % (mm_name, mm_age, mm_city)
  44. browser.get(mm_url)
  45. bs1 = BeautifulSoup(browser.page_source, 'lxml')
  46. base_info = bs1.find('ul', 'mm-p-info-cell clearfix')
  47. info_list = base_info('span')
  48. result = []
  49. result.append('昵称:' + info_list[0].text)
  50. result.append('生日:' + info_list[1].text.strip())
  51. result.append('所在城市:' + info_list[2].text)
  52. result.append('职业:' + info_list[3].text)
  53. result.append('血型:' + info_list[4].text)
  54. result.append('学校/专业:' + info_list[5].text)
  55. result.append('风格:' + info_list[6].text)
  56. result.append('身高:' + base_info.find('li', 'mm-p-small-cell mm-p-height').find('p').text)
  57. result.append('体重:' + base_info.find('li', 'mm-p-small-cell mm-p-weight').find('p').text)
  58. result.append('三围:' + base_info.find('li', 'mm-p-small-cell mm-p-size').find('p').text)
  59. result.append('罩杯:' + base_info.find('li', 'mm-p-small-cell mm-p-bar').find('p').text)
  60. result.append('鞋码:' + base_info.find('li', 'mm-p-small-cell mm-p-shose').find('p').text)
  61. print '资料收集完毕,正在保存她的个人资料……'
  62. filename = '%s/%s.txt' % (mm_folder, mm_name)
  63. with open(filename, 'w') as f:
  64. f.write('\r\n'.join(result))
  65. print '保存完毕!现在开始爬取她的个人相册……'
  66. album_menu_url = joint_url(bs1.find('ul', 'mm-p-menu').find('a')['href'])
  67. browser.get(album_menu_url)
  68. time.sleep(3)
  69. bs2 = BeautifulSoup(browser.page_source, 'lxml')
  70. album_number = 1
  71. for album_info in bs2('div', 'mm-photo-cell-middle'):
  72. album_url = joint_url(album_info.find('h4').find('a')['href'])
  73. album_name = album_info.find('h4').find('a').text.strip()
  74. album_size = album_info.find('span', 'mm-pic-number').text
  75. print '现在开始爬取她的第%d个相册,相册名为:《%s》%s……' % (album_number, album_name, album_size)
  76. browser.get(album_url)
  77. js1 = 'return document.body.scrollHeight'
  78. js2 = 'window.scrollTo(0, document.body.scrollHeight)'
  79. old_scroll_height = 0
  80. while(browser.execute_script(js1) > old_scroll_height):
  81. old_scroll_height = browser.execute_script(js1)
  82. browser.execute_script(js2)
  83. time.sleep(3)
  84. bs3 = BeautifulSoup(browser.page_source, 'lxml')
  85. photo_number = 1
  86. for photo_area in bs3('div', 'mm-photoimg-area'):
  87. print '现在开始下载她这个相册的第%d张图片……' % photo_number,
  88. photo_url = joint_url(photo_area.find('a')['href'])
  89. browser.get(photo_url)
  90. bs4 = BeautifulSoup(browser.page_source, 'lxml')
  91. big_img_url = joint_url(bs4.find('img', id='J_MmBigImg')['src'])
  92. content = requests.get(big_img_url).content
  93. filename = '%s/%d.jpg' % (mm_folder, photo_number)
  94. with open(filename, 'wb') as f:
  95. f.write(content)
  96. print '下载完毕!'
  97. photo_number += 1
  98. album_number += 1

爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)的更多相关文章

  1. 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

     数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby     数据抓取是一门艺术,和其他软件不同,世界上 ...

  2. Selenium&PhantomJS 完成爬取网络代理

    Selenium模块是一套完整的Web应用程序测试系统,它包含了测试的录制(SeleniumIDE).编写及运行(Selenium Remote Control)和测试的并行处理(Selenimu G ...

  3. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  4. 动态网页爬取样例(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test" ...

  5. selenium+phantomjs+pyquery 爬取淘宝商品信息

    from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium ...

  6. Python 之selenium+phantomJS斗鱼抓取案例

    from selenium import webdriver from bs4 import BeautifulSoup import time if __name__ == '__main__': ...

  7. scrapy爬虫实例(1)

    爬虫实例 对象 阳光问政平台 目标 : 主题,时间,内容 爬取思路 预先设置好items import scrapy class SuperspiderItem(scrapy.Item): title ...

  8. Selenium+PhantomJS替代方案

    问题描述: python3在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has ...

  9. Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...

随机推荐

  1. git branch 分支与合并

    在使用 git 进行分支开发与合并的时候需要用到这些命令.其他基本 git 命令参考 Git 简易食用指南 git branch 查看分支 git branch 查看当前分支情况 创建分支 git b ...

  2. eos智能合约开发最佳实践

    安全问题 1.可能的错误 智能合约终止 限制转账限额 限制速率 有效途径来进行bug修复和提升 2.谨慎发布智能合约 对智能合约进行彻底的测试 并在任何新的攻击手法被发现后及时制止 赏金计划和审计合约 ...

  3. 十四:Using CGroups with YARN

        Cgroups可以控制linux 上应用程序的资源(内存.CPU)使用,yarn可以使用Cgroups来CPU使用.Cgroups的配置,在yarn-site.xml中设置: 1)启用Cgro ...

  4. default & delete

    一.使用“=default” 1. 显式生成拷贝控制成员的合成版本 class A { public: A() = default; A(const A &) = default; A& ...

  5. 软工2017团队协作第七周——个人PSP

    10.27 --11.2本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 开始时间                结束时间 中断时间 实际用时 ...

  6. BluetoothAdapter解析

    这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义. 一 BluetoothAdapter简介 1.继承关系 该类仅继承了Object类; 2.该类作用 ...

  7. JavaScript初探系列之String的基本操作

    1.字符串转换 字符串转换是最基础的要求和工作,你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种: var myStr = num.toString(); // "19& ...

  8. [solution]xdebug正确配置,但不显示错误信息

    一开始以为是配置问题,其实不是,折腾了好久,貌似中文网页很少有人提到这事,更别提解决之道! 最好还是用英文关键词google之:得如下网页 https://bugs.launchpad.net/ubu ...

  9. <Effective C++>读书摘要--Introduction

    Introduction 1.Learning the fundamentals of a programming language is one thing; learning how to des ...

  10. 微信小程序wx.pageScrollTo的替代方案

    wx.pageScrollTo这个微信小程序的api功能如下: 简而言之就是实现页面滚动的.但是在实际应用当中显得有些鸡肋,为啥呢?使用中有明显页面有明显的抖动,这无疑是极不好的用户体验.我用的华为6 ...