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;就会更新这个时间。内容数据指…

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

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

VS中C++ 项目重命名

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

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

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

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

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

相同布局在不同手机上显示不同_不懂响应式,不同尺寸屏幕下的页面很难达到最佳效果...

让用户在不同设备和尺寸的屏幕下看的页面显示效果更佳&#xff0c;屏幕空间利用更高&#xff0c;操作体验更统一&#xff0c;交互方式更符合习惯。本文主要围绕什么是响应式&#xff0c;如何搭建响应系统&#xff0c;响应式网站解析 三个部分进行阐述&#xff0c;在项目中提前定…

markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!

有很多喜欢写博客的小伙伴问我&#xff0c;这个代码笔记的格式怎么弄的简洁又好看&#xff0c;虽然csdn里面有Markdown的书写模式&#xff0c;但是我还是想推荐一款比较好用的写笔记的编辑器 - Typora。相信很多小伙伴都在使用吧&#xff0c;这个一直是我最喜欢的 markdown 编辑…

mysql多行合并成一行_数据文件合并与拆分

在数据处理业务中&#xff0c;经常要把文件结构相同或近似相同的数据文件合并成一个文件&#xff0c;或者将一个比较大的数据文件拆分成小的数据文件。本文将介绍文本文件和 Excel 文件合并及拆分会遇到的几种情况&#xff0c;并提供用 esProc SPL 编写的代码示例。esProc 是专…

suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区

引言&#xff1a;我们常常在使用系统的时候突然发现&#xff0c;哎呦~~~我们的磁盘空间不够用啦&#xff01;我遇到常见的就是数据库数据暴增&#xff0c;预留的空间没有啦&#xff0c;只好新添加磁盘&#xff0c;在VB虚拟机上就可以实现&#xff0c;往往苦于没有图文并茂的好资…

arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用

​Arcgis功能真的无比强大&#xff0c;读书时一般只会用到一些常见的&#xff0c;工作后挖掘了很多新功能&#xff0c;数据处理效率大幅提升&#xff0c;个人觉得arcgis是最强大最好用的gis软件&#xff01;本节给大家分享下空间连接功能的两个妙用。空间连接功能很多giser应该…

SpringMVC Mybatis Shiro RestTemplate的实现客户端无状态验证及访问控制【转】

2019独角兽企业重金招聘Python工程师标准>>> A.首先需要搭建SpringMVCShiro环境 a1.pom.xml配置 spring: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>4.1.0.RELEAS…

sql服务器默认密码_搭建一个DNS服务器,轻松实现域名解析内容分发,访问速度提高N倍...

DNS服务器&#xff0c;Domain Name Server&#xff0c;域名解析服务器&#xff0c;互联网上相互通信使用的是IP&#xff0c;但是IP是又长又臭又难记&#xff0c;所以创造了域名来解决IP难写难记的问题&#xff0c;记一个g.cn比203.208.50.127强过不知多少倍了。有了域名&#x…

linux .net 控制台应用程序,VisualStudioCode创建的asp.net core控制台程序部署到linux

1、asp.net core控制台程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、发布发布前&#xff0c;修改test2.csproj文件(项目名称为test2)Exenetcoreapp2.1centos.7-x64主要添…

linux系统怎样写单片机程序,单片机知识是Linux驱动开发的基础之一以及如何学单片机...

这是arm裸机1期加强版第1课第2、3节课程的wiki文字版。为什么没前途也要学习单片机&#xff1f;因为它是个很好的入口。学习单片机可以让我们抛开复杂的软件结构&#xff0c;先掌握硬件操作&#xff0c;如&#xff1a;看原理图、芯片手册、写程序操作寄存器等。在上一节视频里&…

bat 批处理 常用命令和乱码问题

为什么80%的码农都做不了架构师&#xff1f;>>> rem echo off ECHO OFF XCOPY E:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷贝Failure IF ERRORLEVEL 0 ECHO 文件拷贝Success :start set /p first"1记事本,2远程:" if %first% LEQ 2 (IF %first% …

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者&#xff1a;yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务&#xff0c;您可以在发布服务时直接勾选ArcGIS REST地图服务&#xff0c;如下图所示&#xff1a; 也可以在已发布的地图服务中&#x…

new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南

Rust 中&#xff0c;文件读写处理简单而高效。代码也很紧凑&#xff0c;容易阅读。我们从读取文件的字符串行、避免读取写入同一文件、使用内存映射随机访问文件这三个文件处理中的典型案例来了解一下。文件处理场景大家都很熟悉&#xff0c;因此闲言少叙&#xff0c;直接看代码…

【Maven学习笔记(二)】Maven的安装与配置

为什么80%的码农都做不了架构师&#xff1f;>>> 1、默认本地仓库路径 C:\Users\97449\.m2\repository 2、修改本地仓库路径 打开D:\apache-maven\conf\settings.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apa…

npm 全局安装vuecli报错_cnn explainer本地使用--被npm坑惨

最近在知乎上面看到&#xff0c;看到一个cnn解释器&#xff0c;把每个步揍都很清楚的展示了出来&#xff0c;我想自己搞来玩玩。第一次使用npm&#xff0c;很多地方不会&#xff0c;第一步&#xff1a;先在网页上下载下来cnn_explainer&#xff0c;然后解压在没有中文路径的文件…

Python程序从给定的N个数字中找到最大倍数

Here, we will be framing code for finding the maximum multiple of a number x from a given set of a number (set of 5 numbers in this program). 在这里&#xff0c;我们将使用成帧代码&#xff0c; 从给定的一组数字(此程序中的5个数字组成的集合)中找到x的最大倍数 。…