Python抓取花瓣网高清美图
一:前言
嘀嘀嘀,上车请刷卡。昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中。这个妹子主页http://huaban.com/boards/favorite/beauty 是动态加载的,如果想获取更多内容可以模拟下拉,这样就可以更多的图片资源。这种之前爬虫中也做过,但是因为网速不够快所以我就抓了19个栏目,一共500多张美图,也已经很满意了。
先看看效果:
二:运行环境
- IDE:Pycharm
- Python3.6
- lxml 3.7.2
- Selenium 3.4.0
- requests 2.12.4
三:实例分析
1.这次爬虫我开始做的思路是:进入这个网页http://huaban.com/boards/favorite/beauty然后来获取所有的图片栏目对应网址,然后进入每一个网页中去获取全部图片。(如下图所示)
2.但是爬取获取的图片分辨率是236x354,图片质量不够高,但是那个时候已经是晚上1点30之后了,所以第二天做了另一个版本:在这个基础上再进入每个缩略图对应的网页,再抓取像下面这样高清的图片。
四:实战代码
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_sourcedoc = 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' + itemprint('主链接已找到' + main_url)if '*' in fileName:fileName = fileName.replace('*', '')download(main_url, fileName)except Exception as e:print(e)
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 += 1minor_url = 'http://huaban.com' + itemdoc = 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抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...
- python花瓣飘零_小白请上车 | Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...
- python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存
原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...
- async 异步抓取 花瓣网高清大图 30s爬取500张
废话 不多说,直接上代码,不懂得看注释 先安装 pip install aiohttp 1 "异步抓取花瓣网图片" 2 3 # pip install aiohttp 4 imp ...
- python4k高清图片_第一次接触,尝试用python抓取国外4k高清图像数据,真方便
计划了很久,终于还是利用在家的几个月时间,开始学习python编程. 作为一个学霸,我更愿意在实践中学习,实践出来的效果给我更多的信心和乐趣,于是,我花了大约一个月的时间,看了一本Python入门的相 ...
- Python抓取花瓣网图片脚本
2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- encoding:utf-8 -*- # author :insun ...
- python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片
成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...
- python爬虫教程,带你抓取百度的高清摄影图片
python爬虫教程,带你抓取百度的高清摄影图片 源码分享: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群里有不错的学习教程.开发工具与电子书籍. ...
- Python 网络爬虫:爬取4K高清美图
爬取4K高清美图 这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助! 文章目录 爬取4K ...
最新文章
- Win/Linux常用命令
- Mybatis传多个参数(推荐)
- Spoken English(021)
- 基于LSTM电商评论情感分析-多评价指标可视化版(内附源码)【自然语言处理NLP-100例】
- 帕雷托最优(Pareto optimality)、帕雷托效率(Pareto efficiency)
- c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...
- Jz2440 环境安装
- redis 秒杀成功 mysql_如何使用Redis实现秒杀
- FreeSql (三十)读写分离
- 介绍数据库中的wal技术_简介事务ACID的实现机制
- 小型网站项目完整部署流程(Windows操作系统)
- python读取cad元素_python3读取autocad图形文件.py实例
- android 属性动画源码分析
- idea工程在maven projects中显示灰色的解决办法
- 如何去掉高CAD选择集对话框(高版本才有)
- Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
- cleanmymac4.12最新版下载安装教程
- Longest Common Subsequence
- 回答华为公司面试题一头牛重800公斤一座桥承重700公斤问牛怎么过桥?
- CentOS7搭建小型CDN
热门文章
- python操作数据库出现错误 : Unknown column 'XXXX' in 'where clause'amp;amp;amp;amp;amp;amp;amp;amp;quot;
- 网络测试工具 iperf 使用指南
- 实训第五天:播放器现目的实现
- WordPress Hueman 主题中文语言包
- python小游戏——推箱子代码开源
- html5卷轴展开动画,8款基于Jquery的WEB前端动画特效
- 计算机学术英语演讲,学术英语演讲稿.docx
- 【Fabric】简单测试:链码单元测试+fabric-go-sdk
- 简单!Nokia 6681拨号发音轻松玩
- 在Dupal 中使用panels模块