一:前言

嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页http://huaban.com/boards/favorite/beauty 是动态加载的,如果想获取更多内容可以模拟下拉,这样就可以更多的图片资源。这种之前爬虫中也做过,但是因为网速不够快所以我就抓了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.这次爬虫我开始做的思路是:进入这个网页http://huaban.com/boards/favorite/beauty 然后来获取所有的图片栏目对应网址,然后进入每一个网页中去获取全部图片。(如下图所示)

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 webdriver

import requests

import lxml.html

import 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.下面的代码就是解析本次主页面http://huaban.com/boards/favorite/beauty/ 然后获取到每个栏目的网址和栏目的名称,使用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 = 0

for 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_url2

try:

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多张妹纸还是挺养眼的。

贴出我的github地址,我的爬虫代码和学习的基础部分都放进去了,有喜欢的朋友一起学习交流吧!

Paste_Image.png

python实现爬虫收集图片 花瓣网_Python爬虫日记七:批量抓取花瓣网高清美图并保存...相关推荐

  1. python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存

    原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...

  2. python从网址爬图片协程_python 用 gevent 协程抓取海量网页

    python作为爬虫利器,抓网页的方式简洁明了.爬成百上千的网页,都可以很快爬完,但是如果网页数量上万呢?速度就不能忍受了. 这是一段爬取页面的函数,用了requests库:1 2 3 4 5impo ...

  3. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

  4. python爬虫教程,带你抓取百度的高清摄影图片

    python爬虫教程,带你抓取百度的高清摄影图片 源码分享: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群里有不错的学习教程.开发工具与电子书籍. ...

  5. Python 网络爬虫:爬取4K高清美图

    爬取4K高清美图 这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助! 文章目录 爬取4K ...

  6. 爬虫百度百万高清美图源代码

    @T爬虫百度百万高清美图源代码OC #! -- coding: utf-8 -- Date:2020-09-20 16:52 USER:gordon_lu 使用正则表达式 删选指定的 URL 链接. ...

  7. 批量抓取凤凰网文章类

    # -*- coding: utf-8 -*- import urllib2,re file = open('fenghuang.txt', 'w')""" 批量抓取凤凰 ...

  8. python4k高清图片_第一次接触,尝试用python抓取国外4k高清图像数据,真方便

    计划了很久,终于还是利用在家的几个月时间,开始学习python编程. 作为一个学霸,我更愿意在实践中学习,实践出来的效果给我更多的信心和乐趣,于是,我花了大约一个月的时间,看了一本Python入门的相 ...

  9. python爬虫音乐图片的感受_python爬虫+词云图,爬取网易云音乐评论

    又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...

  10. 小白请上车 | Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...

最新文章

  1. SAP PM入门系列29 - IW65 Display Activities
  2. 简单的函数(也叫方法)
  3. Nginx教程系列三:Nginx常用命令
  4. ProgressBar 各种样式
  5. html5 canvas图文编辑器源码_5个微信编辑器,再也不用为公众号发愁啦
  6. MySQL my.cnf file - Found option without preceding group
  7. matlab中文帮助_拿走不谢,simulink,stateflow,ecoder帮助手册中英对照版首发
  8. matlab中的g2(t)是什么,matlab实验1-8带答案,,
  9. php中高光显示的高数,[技术博客]React Native——HTML页面代码高亮数学公式解析...
  10. 漏洞扫描工具Vulmap
  11. SpringBoot启动报jdbc连接池错误
  12. php jpgraph 中文,JPGraph 4.0(for PHP7)中文字体设置
  13. 网易公开课专辑下载脚本python
  14. 用html设计logo,终于知道网页logo设计要点
  15. 世界杯开赛看球吃麻辣小龙虾
  16. python学习之体验01
  17. web前端高级JavaScript - 前端web高级开发知识体系课程大纲
  18. CSDN网站勋章获取介绍
  19. UART的RTL逻辑设计部分 - uart_rx
  20. linux系统的烤机软件,NVIDIA英伟达 GeForce8/9/100/200/300/400/500/GeForce 600系列显卡Linux驱动...

热门文章

  1. 小芭比linux怎么装win7_超迷你的Linux系统--Puppy Linux(小芭比)
  2. ie浏览器css怎么调,IE浏览器下的CSS问题小结
  3. 江西省吉安市永丰县市政花园(市政服务大楼[厅]) 工程质量及违法违规建筑容积率问题2011年11月简述报告
  4. python socket编程实例 带图形界面_python的socket编程实例
  5. 简单易懂的ueditor新手教程
  6. cad打开卡死_CAD一打开就卡死,重装也不管用怎么办?
  7. 计算机组成原理:超标量,让CPU的吞吐率超过1
  8. Unity资源加载闪退问题深度分析
  9. 智慧社区管理类毕业论文文献不好找?
  10. 【效率提高10倍项目原创发布!】深度学习数据自动标注器开源 目标检测和图像分类(高精度高效率)