python--批量下载豆瓣图片

 

溜达豆瓣的时候,发现一些图片,懒得一个一个扒,之前写过c#和python版本的图片下载,因此拿之前的Python代码来改了改,折腾出一个豆瓣版本,方便各位使用

# -*- coding:utf8 -*-
import urllib2, urllib, socket
import re
import requests
from lxml import etree
import os, timeDEFAULT_DOWNLOAD_TIMEOUT = 30class AppURLopener(urllib.FancyURLopener):version = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)"def check_save_path(save_path):if not os.path.exists(save_path):os.makedirs(save_path)def get_image_name(image_link):file_name = os.path.basename(image_link)return file_namedef save_image1(image_link, save_path):file_name = get_image_name(image_link)file_path = save_path + "\\" + file_nameprint("准备下载{0} 到{1}".format(image_link, file_path))try:urllib._urlopener = AppURLopener()socket.setdefaulttimeout(DEFAULT_DOWNLOAD_TIMEOUT)urllib.urlretrieve(url=image_link, filename=save_path)return Trueexcept Exception, ex:print(ex.args)print("下载文件出错:{0}".format(ex.message))return Falsedef save_image(image_link, save_path):file_name = get_image_name(image_link)file_path = save_path + "\\" + file_nameprint("准备下载{0} 到{1}".format(image_link, file_path))try:file_handler = open(file_path, "wb")image_handler = urllib2.urlopen(url=image_link, timeout=DEFAULT_DOWNLOAD_TIMEOUT).read()file_handler.write(image_handler)return Trueexcept Exception, ex:print("下载文件出错:{0}".format(ex.message))return Falsedef get_thumb_picture_link(thumb_page_link):try:html_content = urllib2.urlopen(url=thumb_page_link, timeout=DEFAULT_DOWNLOAD_TIMEOUT).read()html_tree = etree.HTML(html_content)# print(str(html_tree))link_tmp_list = html_tree.xpath('//div[@class="photo_wrap"]/a[@class="photolst_photo"]/img/@src')page_link_list = []for link_tmp in link_tmp_list:page_link_list.append(link_tmp)return page_link_listexcept Exception, ex:print(ex.message)return []def download_pictures(album_link, min_page_id, max_page_id, picture_count_per_page, save_path):check_save_path(save_path)min_page_id = 0while min_page_id < max_page_id:thumb_page_link = album_link + "?start={0}".format(min_page_id * picture_count_per_page)thumb_picture_links = get_thumb_picture_link(thumb_page_link)for thumb_picture_link in thumb_picture_links:full_picture_link = thumb_picture_link.replace("photo/lthumb", "photo/large")save_flag = save_image(image_link=full_picture_link, save_path=save_path)if not save_flag:full_picture_link = thumb_picture_link.replace("photo/thumb", "photo/photo")save_image(image_link=full_picture_link, save_path=save_path)time.sleep(1)min_page_id += 1print("下载完成")# 设置图片保存的本地文件夹
save_path = "J:\\douban\\gugu"
# 设置相册地址,注意以反斜杠结尾
album_link = "https://www.douban.com/photos/album/1625969357/"
# 设置相册总页数
max_page_id = 11
# 设置每页图片数量,默认为18张
picture_count_per_page = 18download_pictures(album_link=album_link,min_page_id=1,max_page_id=max_page_id,picture_count_per_page=picture_count_per_page,save_path=save_path)

 

=============================================================

相对urllib2来说,urllib 真的比较坑,如果不设置User-Agent,下载速度会超慢无比,另外还需要调用socket模块来设置超时时间,比较折腾,最终可能还会踩到其他坑里去,比如我下着下着就被豆瓣给‘屏蔽’啦,so建议使用urllib2。

相关参考链接:

http://www.jb51.net/article/57239.htm

http://www.crifan.com/use_python_urllib-urlretrieve_download_picture_speed_too_slow_add_user_agent_for_urlretrieve/comment-page-1/

=============================================================

国庆最后一天,祝各位国庆快乐!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux touch权限不够,Linux下的Access、Modify、Change , touch的使用以及权限问题

每个文件在linux下面都会记录许多的时间参数&#xff0c;其实是有三个主要的变动时间&#xff0c;那么&#xff0c;这三个时间的意义又是什么&#xff1f;下面我们来介绍&#xff1a;* Modify time(mtime)当该文件的“内容数据”更改时&#xff0c;就会更新这个时间。内容数据指…

scala 获取数组中元素_从Scala中的元素列表中获取随机元素

scala 获取数组中元素We can access a random element from a list in Scala using the random variable. To use the random variable, we need to import the Random class. 我们可以使用随机变量从Scala中的列表访问随机元素。 要使用随机变量&#xff0c;我们需要导入Rand…

ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录

已有条件: ubuntu14.04cuda7.5anaconda2(即python2.7)matlabR2014a 上述已经装好了,开始搭建caffe环境. 1. 装cudnn5.1.3,参照:2015.08.17 Ubuntu 14.04cuda 7.5caffe安装配置 详情:先下载好cudnn-7.5-linux-x64-v5.1-rc.tgz安装包(貌似需要官网申请) 解压: tar -zxvf cudnn-7.…

python excel导入oracle数据库_【Python代替Excel】12:Python操作oracle数据库

日常工作中&#xff0c;如果有数据库权限&#xff0c;那么在oracle中提取数据、在Python中处理是比较方便的。Python也提供了一个库专门操纵数据库。今天就专门来讲讲如何在Python中操作数据库。准备工作需要工具&#xff1a;oracle、PL/SQL、Pythonimport cx_Oracle如果用anac…

Linux 金字塔 的shell命令,linux下保留文件系统下剩余指定数目文件的shell脚本

原文出处&#xff1a;http://www.jbxue.com/article/13808.html (原创文章&#xff0c;转载请注明出处)本节内容&#xff1a;保留文件系统下剩余指定数目的文件例子&#xff1a;#!/bin/bash#-------------------------------#Description: Back up your files#site: www.jbxue.…

前端干货之JS最佳实践

持续更新地址 https://wdd.js.org/js-best-pr... 1. 风格 一千个读者有一千个哈姆雷特&#xff0c;每个人都有自己的code style。我也曾为了要不要加分号给同事闹个脸红脖子粗&#xff0c;实际上有必要吗&#xff1f; 其实JavaScript已经有了比较流行的几个风格 JavaScript Sta…

python requests和urllib_Python——深入理解urllib、urllib2及requests(requests不建议使用?)...

深入理解urllib、urllib2及requestsPython 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido vanRossum于1989年底发明&#xff0c;第一个公开发行版发行于1991年&#xff0c;Python 源代码同样遵循 GPL(GNU General PublicLicense)协议[1] 。Python语法简洁而清晰…

ssh查找linux端口,linux – 查找当前连接的端口号SSH

我正在使用SSH连接创建一个本地模拟器(未连接到Internet).我已经开始使用特定范围的端口号进行sshd,并对一系列设备进行NAT处理.我必须找到当前连接的端口号.OS CentOS 5.5OpenSSH 6.1我做了以下事情.它适用于正常使用(手动用户).但是当尝试严格的测试(自动化)时,似乎有时找不到…

this.getstate_Java线程类Thread.State getState()方法(带示例)

this.getstate线程类Thread.State getState() (Thread Class Thread.State getState()) This method is available in package java.lang.Thread.getState(). 软件包java.lang.Thread.getState()中提供了此方法。 This method is used to return the state of this thread. 此方…

Java资源大全中文版(Awesome最新版)

来源&#xff1a;http://www.cnblogs.com/best/p/5876559.html 目录 业务流程管理套件字节码操作集群管理代码分析编译器生成工具构建工具外部配置工具约束满足问题求解程序持续集成CSV解析数据库数据结构时间日期工具库依赖注入开发流程增强工具分布式应用分布式数据库发布文档…

运用多种设计模式的综合案例_SpreadJS 纯前端表格控件应用案例:表格数据管理平台...

由某科技公司研发的表格数据管理平台&#xff0c;是一款面向业务和企业管理系统定制开发的应用平台&#xff0c;包括类 Excel 设计器、PC应用端和移动应用端等应用模块。该平台具备强大的业务配置和集成开发能力&#xff0c;对于企业客户的信息系统在管理模式、业务流程、表单界…

linux定位哪个进程出发重启,定位Linux下定位进程被谁KILL

hezhaoaqiang2012-11-09 11:10可以请教你一个问题吗&#xff1f;关于arm的交叉编译。我是按照&#xff1a;http://blog.chinaunix.net/uid-27003388-id-3276139.html 去做的&#xff0c;但是走到 四、建立初始编译器(bootstrap gcc)下面的make install 它提示如下&#xff1a;m…

Java Integer类numberOfLeadingZeros()方法的示例

整数类numberOfLeadingZeros()方法 (Integer class numberOfLeadingZeros() method) numberOfLeadingZeros() method is available in java.lang package. 在java.lang包中提供了numberOfLeadingZeros()方法 。 numberOfLeadingZeros() method is used to returns the number o…

VS中C++ 项目重命名

应该都有过这样的经历&#xff0c;在Visual studio中创建解决方案&#xff0c;添加几个项目进去&#xff0c;然后开始愉快的敲代码...。写代码正欢的时候&#xff0c;却总是感觉那里有些不舒服&#xff0c;一细看&#xff0c;这项目名称取的真心挫&#xff0c;修改个吧。直接右…

Java GregorianCalendar getActualMinimum()方法与示例

GregorianCalendar类getActualMinimum()方法 (GregorianCalendar Class getActualMinimum() method) getActualMinimum() method is available in java.util package. getActualMinimum()方法在java.util包中可用。 getActualMinimum() method is used to get the actual minim…

axure9数据统计插件_WMDA:大数据技术栈的综合实践

一、概述WMDA是58自主开发的用户行为分析产品&#xff0c;同时也是一款支持无埋点的数据采集产品&#xff0c;只需要在第一次使用的时候加载一段SDK代码&#xff0c;即可采集全量、实时的PC、M、APP三端以及小程序的用户行为数据。同时&#xff0c;为了满足用户个性化的数据采集…

Java Collections unmodifiableCollection()方法与示例

集合类unmodifiableCollection()方法 (Collections Class unmodifiableCollection() method) unmodifiableCollection() method is available in java.util package. unmodifiableCollection()方法在java.util包中可用。 unmodifiableCollection() method is used to get an un…

openfoam安装中出现allmake error_如何更新OpenFOAM的版本?

这是协作翻译的第四章&#xff0c;翻译完感觉挺有意思的&#xff0c;分享给大家一起看看。4.更新OpenFOAM版本4.1 版本管理OpenFOAM以两种不同的方式分发。一种方式是使用Git仓库下载的仓库版本。仓库版本的版本号由附加的x标记&#xff0c;例如 OpenFOAM2.1.x。该版本会经常更…

java 根据类名示例化类_Java类类的requiredAssertionStatus()方法和示例

java 根据类名示例化类类的类requiredAssertionStatus()方法 (Class class desiredAssertionStatus() method) desiredAssertionStatus() method is available in java.lang package. requiredAssertionStatus()方法在java.lang包中可用。 desiredAssertionStatus() method is …

python中计算排列组合的函数_Python实现的排列组合计算操作示例

本文实例讲述了Python实现的排列组合计算操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1. 调用 scipy 计算排列组合的具体数值>> from scipy.special import comb, perm>> perm(3, 2)6.0>> comb(3, 2)3.02. 调用 itertools 获取排列组合的全部…