一:前言

嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页 是动态加载的,如果想获取更多内容可以模拟下拉,这样就可以更多的图片资源。这种之前爬虫中也做过,但是因为网速不够快所以我就抓了19个栏目,一共500多张美图,也已经很满意了。

先看看效果:

Paste_Image.png

Paste_Image.png

二:运行环境IDE:Pycharm

Python3.6

lxml 3.7.2

Selenium 3.4.0

requests 2.12.4

三:实例分析

1.这次爬虫我开始做的思路是:进入这个网页然后来获取所有的图片栏目对应网址,然后进入每一个网页中去获取全部图片。(如下图所示)

Paste_Image.png

Paste_Image.png

2.但是爬取获取的图片分辨率是236x354,图片质量不够高,但是那个时候已经是晚上1点30之后了,所以第二天做了另一个版本:在这个基础上再进入每个缩略图对应的网页,再抓取像下面这样高清的图片。

Paste_Image.png

四:实战代码

1.第一步导入本次爬虫需要的模块__author__ = '布咯咯_rieuse'

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.ui import WebDriverWait

from selenium import webdriverimport requestsimport lxml.htmlimport os

2.下面是设置webdriver的种类,就是使用什么浏览器进行模拟,可以使用火狐来看它模拟的过程,也可以是无头浏览器PhantomJS来快速获取资源,['--load-images=false', '--disk-cache=true']这个意思是模拟浏览的时候不加载图片和缓存,这样运行速度会加快一些。WebDriverWait标明最大等待浏览器加载为10秒,set_window_size可以设置一下模拟浏览网页的大小。有些网站如果大小不到位,那么一些资源就不加载出来。# SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']# browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)browser = webdriver.Firefox()wait = WebDriverWait(browser, 10)browser.set_window_size(1400, 900)

3.parser(url, param)这个函数用来解析网页,后面有几次都用用到这些代码,所以直接写一个函数会让代码看起来更整洁有序。函数有两个参数:一个是网址,另一个是显性等待代表的部分,这个可以是网页中的某些板块,按钮,图片等等...def parser(url, param):

browser.get(url)

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, param)))

html = browser.page_source

doc = lxml.html.fromstring(html)return doc

4.下面的代码就是解析本次主页面 然后获取到每个栏目的网址和栏目的名称,使用xpath来获取栏目的网页时,进入网页开发者模式后,如图所示进行操作。之后需要用栏目名称在电脑中建立文件夹,所以在这个网页中要获取到栏目的名称,这里遇到一个问题,一些名称不符合文件命名规则要剔除,我这里就是一个 * 影响了。def get_main_url():

print('打开主页搜寻链接中...')try:

doc = parser('http://huaban.com/boards/favorite/beauty/', '#waterfall')

name = doc.xpath('//*[@id="waterfall"]/div/a[1]/div[2]/h3/text()')

u = doc.xpath('//*[@id="waterfall"]/div/a[1]/@href')for item, fileName in zip(u, name):

main_url = 'http://huaban.com' + item

print('主链接已找到' + main_url)if '*' in fileName:

fileName = fileName.replace('*', '')

download(main_url, fileName)except Exception as e:

print(e)

Paste_Image.png

5.前面已经获取到栏目的网页和栏目的名称,这里就需要对栏目的网页分析,进入栏目网页后,只是一些缩略图,我们不想要这些低分辨率的图片,所以要再进入每个缩略图中,解析网页获取到真正的高清图片网址。这里也有一个地方比较坑人,就是一个栏目中,不同的图片存放dom格式不一样,所以我这样做img_url = doc.xpath('//*[@id="baidu_image_holder"]/a/img/@src')

img_url2 = doc.xpath('//*[@id="baidu_image_holder"]/img/@src')

这就把两种dom格式中的图片地址都获取了,然后把两个地址list合并一下。img_url +=img_url2

在本地创建文件夹使用filename = 'image\{}\'.format(fileName) + str(i) + '.jpg'表示文件保存在与这个爬虫代码同级目录image下,然后获取的图片保存在image中按照之前获取的栏目名称的文件夹中。def download(main_url, fileName):

print('-------准备下载中-------')try:

doc = parser(main_url, '#waterfall')if not os.path.exists('image\\' + fileName):

print('创建文件夹...')

os.makedirs('image\\' + fileName)

link = doc.xpath('//*[@id="waterfall"]/div/a/@href')# print(link)

i = 0for item in link:

i += 1

minor_url = 'http://huaban.com' + item

doc = parser(minor_url, '#pin_view_page')

img_url = doc.xpath('//*[@id="baidu_image_holder"]/a/img/@src')

img_url2 = doc.xpath('//*[@id="baidu_image_holder"]/img/@src')

img_url +=img_url2try:

url = 'http:' + str(img_url[0])

print('正在下载第' + str(i) + '张图片,地址:' + url)

r = requests.get(url)

filename = 'image\\{}\\'.format(fileName) + str(i) + '.jpg'with open(filename, 'wb') as fo:

fo.write(r.content)except Exception:

print('出错了!')except Exception:

print('出错啦!')if __name__ == '__main__':

get_main_url()

五:总结

这次爬虫继续练习了Selenium和xpath的使用,在网页分析的时候也遇到很多问题,只有不断练习才能把自己不会部分减少,当然这次爬取了500多张妹纸还是挺养眼的。

python实现爬虫收集图片 花瓣网_利用Python抓取花瓣网美图实例相关推荐

  1. python网络爬虫用到哪些技术_做Python网络爬虫需要掌握哪些核心技术?

    在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战.基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因.那么做Python网络爬虫需要掌握哪些核心技 ...

  2. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

  3. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 Python版本:3.6.4 相关模块: requests模块: bs4模块: wordcloud模块 ...

  4. python网络爬虫实战 吕文翔_实战Python网络爬虫

    本书从原理到实践,循序渐进地讲述了使用Python开发网络爬虫的核心技术.全书从逻辑上可分为基础篇.实战篇和爬虫框架篇三部分.基础篇主要介绍了编写网络爬虫所需的基础知识,包括网站分析.数据抓取.数据清 ...

  5. python图片文字合成视频_利用Python将多张图片合成视频的实现

    今天要做一个量子隧穿的的演示动画,在CSDN上看了很多大佬的文章,然而忙了接近半天才做好这件事.把踩过的坑记一下,同时这段代码也是值得记录的,因为以后也可能遇到类似的工作. 先上代码` import ...

  6. 下面哪个python库不能用于提取网页信息_利用python的webscraping库采集抓取爱帮网电话号码...

    利用python的webscraping模块抓取爱帮网电话号码,本文采集该页面的标题和2个电话号码, 具体的python代码: # -*- coding: UTF-8 -*- ''' Created ...

  7. python中词云的图片是蒙版_用Python做简易词云

    最近突发奇想,想做个词云玩玩,这算是Python的一个很初级的应用,虽然很初级,依然免不了会出现各种bug~ 使用工具: Anaconda:一个开源的用于Python科学计算的发行版本 jieba:一 ...

  8. python网络爬虫学习笔记(7)动态网页抓取(二)实践

    文章目录 1 资料 2 笔记 2-1 准备 2-1-1. 网址 2-2-2 文本位置 2-2 代码 2-2-1 原型 2-2-2 ver0.1 1 资料 <Python网络爬虫从入门到实践> ...

  9. python网络爬虫学习笔记(6)动态网页抓取(一)知识

    文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...

  10. [Python爬虫] 之三十:Selenium +phantomjs 利用 pyquery抓取栏目

    一.介绍 本例子用Selenium +phantomjs爬取栏目(http://tv.cctv.com/lm/)的信息 二.网站信息 三.数据抓取 首先抓取所有要抓取网页链接,共39页,保存到数据库里 ...

最新文章

  1. 是时候不把智能手机叫做电话了:移动AI时代来临!
  2. 详细解读Volley(二)—— ImageRequest Request简介
  3. Dynamics CRM Publisher
  4. java bootclasspath
  5. 【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)
  6. 利用java poi对excel表的读写操作
  7. Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)
  8. java运行python3_Python3:如何从python运行java类文件
  9. 一个简单的优酷视频链接探测与分享功能
  10. Atitit.java expression fsm 表达式分词fsm引擎
  11. 数字孪生堆场智慧安全管控平台
  12. 腾讯云内容分发网络 CDN 产品认证课程笔记(二)——腾讯云CDN介绍
  13. 《故事处方》丹提w摩尔 epub+mobi+azw3
  14. 微信公众号文章信息(阅读量、在看、点赞数)获取
  15. 南京车贴制作,海报车贴写真喷绘制作
  16. 大数据面试常见问题(七)——面试部分
  17. 一文阐述数据科学完整学习路线图
  18. 卸载sqlserver2008,完全清除
  19. 一. pandas入门介绍(一)
  20. VS2015下解决:error LNK2019: 无法解析的外部符号 __iob_func

热门文章

  1. 服务器mt核心bug修复,RHSA-2020:0374-重要: 内核 安全和BUG修复更新 解决方法
  2. 中班音乐会跳舞的机器人_中班音乐律动机器人
  3. RapidXml读取并修改XML文件
  4. Python基础总结
  5. 快播创始人微博晒出团队合照
  6. 小小flash动画_信息追梦人 | 动画制作专业优秀毕业生周海倩
  7. mysql amd.dll 后门_DLL型后门原理及完全清除秘诀
  8. [渝粤教育] 西南科技大学 高等数学2 在线考试复习资料
  9. 戴尔t系列服务器拆机,拆解:规整扎实条理清晰的戴尔T7600_联想ThinkCentre台式电脑_台式电脑评测-中关村在线...
  10. 如何查看计算机的硬盘序列号,电脑上的硬盘序列号如何查