Phantomjs与Selenium爬取图片

1、任务描述

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

2、任务目标

一、掌握正则表达式html

二、掌握网络爬虫的原理html5

3、任务环境

Ubuntu16.0四、Python2.7python

4、任务分析

  学习爬虫,首先是要学习它的原理。打开网址,每页都有不少套图,若是要手动去保存,怎么操做?想应该是这样,从第一页开始,点进第一个套图,而后保存每张图片,而后进行第二个套图……第一页完了以后第二页,从第一个套图开始,保存保存……这就是原理,固然,虽然这样能达到这个目的,但你们应该没有那么多的时间,那么就来学习爬虫,来保存图片。web

5、任务实施

步骤一、环境准备正则表达式

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

  经过【cd /home】切换到home目录下。【ls】查看该目录下的全部内容。vim

 

图1 切换目录

  【mkdir Image】在home目录下建立Image文件夹。浏览器

图2 建立文件夹

步骤二、爬虫分析ruby

  爬取的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 基本信息

步骤三、源代码

    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("\n")
    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 + "\n")
    46. a.write("Hight And weight:" + girlHW + "\n")
    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()
相关文章
相关标签/搜索