zoukankan      html  css  js  c++  java
  • Phantomjs与Selenium爬取图片

    一、任务描述

      本实验任务主要对网络爬虫进行一些基本操作,通过完成本实验任务,要求学生熟练掌握网络爬虫的网络请求及数据解析,并对网络爬虫的基本操作进行整理并填写工作任务报告。

    二、任务目标

    1、掌握正则表达式

    2、掌握网络爬虫的原理

    三、任务环境

    Ubuntu16.04、Python2.7

    四、任务分析

      学习爬虫,首先是要学习它的原理。打开网址,每页都有很多套图,如果要手动去保存,怎么操作?想应该是这样,从第一页开始,点进第一个套图,然后保存每张图片,然后进行第二个套图……第一页完了之后第二页,从第一个套图开始,保存保存……这就是原理,当然,虽然这样能达到这个目的,但大家应该没有那么多的时间,那么就来学习爬虫,来保存图片。

    五、任务实施

    步骤1、环境准备

      右击Ubuntu操作系统桌面,从弹出菜单中选择【Open in Terminal】命令 打开终端。

      通过【cd /home】切换到home目录下。【ls】查看该目录下的所有内容。

    图1 切换目录

      【mkdir Image】在home目录下创建Image文件夹。

    图2 创建文件夹

    步骤2、爬虫分析

      爬取的MM图片URL为https://mm.taobao.com/search_tstar_model.htm?

      打开浏览器输入该URL,查看界面效果。把所有的MM图片下载下来。

    图3 分析URL

      通过【cd /Image】切换到Image目录下。【vim taobaoMM.py】回车后创建并编辑taobaoMM.py的Python文件。

    图4 切换目录

      回车后进入编辑框内,按键盘【i】进入编辑状态,编译如下程序。

      导入程序所需的所有库。

    图5 导入库

      browserPath是Phantomjs的路径

      homeUrl是爬取的页面

      outputDir是保存的文件夹路径

      parser是解析器

    图6 路径

      加载PhantomJS的浏览器,通过driver.get(url)来访问URL,用BeautifulSoup来对得到爬取的URL进行解析。driver.page_source是网页的全部HTML源码。最后通过主方法来调用main方法。

    图7 获取URL

      编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【python taobaoMM.py】执行taobaoMM的Python文件。driver.page_source输出的结果是网页的全部HTML源码。

    图8 运行Python文件

      打开访问URL的浏览器,右键选择【Inspect Element(Q)】根据判断得知,MM的所有信息在id为J_GirlsList内。

    图9 分析网址

      【vim taobaoMM.py】再次编辑taobaoMM.py文件。

      在main函数内通过find_element_by_id获得所有信息,正则表达式获取妹子的封面图片以及个人主页的地址。

    图10 解析信息

      在main函数内通过list列表的截取得到妹子的名字地点、身高体重、个人主页地址以及封面图片地址。

    图11 截取信息

      在main函数内将妹子的信息通过zip函数封装(zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表)。再通过for循环,对妹子的信息进行写入。

    图12 信息封装

      定义mkdir函数,判断图片输出的路径是否存在,不存在则创建。

    图13 输出路径

      在主方法内调用mkdir函数,并将输出路径作为参数传递。

    图14 参数传递

      编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,【python taobaoMM.py】执行taobaoMM的Python文件。爬取需要几分钟。静等几分钟后。打开/home/Image/MMImage下。发现生成很多文件夹。

    图15 运行Python文件

      每个目录下都包含MM的主图以及保存信息的txt文件。

    图16 目录信息

      txt文件内包含了MM的基本信息。

    图17 基本信息

    步骤3、源代码

      1. #coding:utf-8
      2. import os
      3. import re
      4. from bs4 import BeautifulSoup
      5. import urllib2
      6. from selenium import webdriver
      7. import sys
      8. reload(sys)
      9. sys.setdefaultencoding( "utf-8" )
      10. browserPath = "/home/soft/phantomjs/bin/phantomjs"
      11. homeUrl = "https://mm.taobao.com/search_tstar_model.htm?"
      12. outputDir = "MMImage/"
      13. parser = "html5lib"
      14. def main():
      15. #PhantomJS浏览器的地址
      16. driver = webdriver.PhantomJS(executable_path=browserPath)
      17. #访问目标网页地址
      18. driver.get(homeUrl)
      19. #解析目标网页的 Html 源码
      20. bsObj = BeautifulSoup(driver.page_source,parser)
      21. #获得主页上所有妹子的姓名、所在城市、身高、体重等信息
      22. girlsList = driver.find_element_by_id("J_GirlsList").text.split(" ")
      23. #获取所有妹子的封面图片
      24. imagesUrl = re.findall(r"//gtd.alicdn.com/sns_logo.*.jpg",driver.page_source)
      25. #解析出妹子的个人主页地址等信息
      26. girlsUrl = bsObj.find_all("a",{"href":re.compile("//.*.htm?(userId=)d*")})
      27. # 所有妹子的名字地点
      28. girlNL = girlsList[::3]
      29. # 所有妹子的身高体重
      30. girlsHW = girlsList [1::3]
      31. # 所有妹子的个人主页地址
      32. girlsHURL = [("http:" + i["href"]) for i in girlsUrl]
      33. # 所有妹子的封面图片地址
      34. girlsPhotoURL = [("https:" + i) for i in imagesUrl]
      35. girlsInfo = zip(girlNL, girlsHW, girlsHURL, girlsPhotoURL)
      36. for girlNL,girlHW,girlHURL,girlCover in girlsInfo:
      37. #建立文件夹
      38. mkdir(outputDir + girlNL)
      39. # 获取妹子封面图片
      40. data = urllib2.urlopen(girlCover).read()
      41. with open(outputDir + girlNL + "/cover.jpg","wb") as f:
      42. f.write(data)
      43. f.close()
      44. with open(outputDir + girlNL + "/information.txt","wb") as a:
      45. a.write("Name And City:" + girlNL + " ")
      46. a.write("Hight And weight:" + girlHW + " ")
      47. a.write("personal homepage:" + girlHURL)
      48. a.close()
      49. driver.close()
      50. def mkdir(path):
      51. #判断路径是否存在
      52. isExists = os.path.exists(path)
      53. #判断结果
      54. if not isExists:
      55. #如果不存在则创建目录
      56. print(" 新建了文件夹",path)
      57. #创建目录操作函数
      58. os.makedirs(path)
      59. else:
      60. #如果目录存在则不创建,并提示目录已存在
      61. print("文件夹", path, "已创建")
      62. if __name__ == "__main__":
      63. if not os.path.exists(outputDir):
      64. os.makedirs(outputDir)
      65. main()
  • 相关阅读:
    关于32位操作系统和64位操作系统对InstallShield打包的影响
    NEWS: Symantec宣布Wise Package Studio将终止
    InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化
    Basic INFO 在命令行Build InstallShield安装包工程获得压缩安装包
    NEWS InstallShield 2012 Service Pack 1发布
    Basic INFO InstallShield Basic MSI工程中如何在SetupCompleteSuccess界面中启动Readme
    Basic INFO InstallShield的脚本编辑器中如何显示代码行号
    Basic INFO 关于在InstallShield制作的安装包界面中删除InstallShield文字的厂商回复
    Basic INFO InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
    Basic INFO: 创建隐藏文件夹
  • 原文地址:https://www.cnblogs.com/yu-1104/p/9050410.html
Copyright © 2011-2022 走看看