python--批量下载豆瓣图片

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

# -*- coding:utf8 -*-
import urllib2, urllib, socket
import re
import requests
from lxml import etree
import os, time

DEFAULT_DOWNLOAD_TIMEOUT = 30

class 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_name

def save_image1(image_link, save_path):
    file_name = get_image_name(image_link)
    file_path = save_path + "\\" + file_name
    print("准备下载{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 True
    except Exception, ex:
        print(ex.args)
        print("下载文件出错:{0}".format(ex.message))
        return False

def save_image(image_link, save_path):
    file_name = get_image_name(image_link)
    file_path = save_path + "\\" + file_name
    print("准备下载{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 True
    except Exception, ex:
        print("下载文件出错:{0}".format(ex.message))
        return False

def 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_list
    except 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 = 0
    while 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/thumb", "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 += 1
    print("下载完成")

# 设置图片保存的本地文件夹
save_path = "J:\\douban\\meiren2"
# 设置相册地址,注意以反斜杠结尾
album_link = "https://www.douban.com/photos/album/43697061/"
# 设置相册总页数
max_page_id = 9
# 设置每页图片数量,默认为18张
picture_count_per_page = 18
download_pictures(album_link, max_page_id, picture_count_per_page, 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/

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

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

时间: 2024-08-10 15:09:45

python--批量下载豆瓣图片的相关文章

使用Python批量下载网站图片

  在网上冲浪的时候,总有些"小浪花"令人喜悦.没错,小浪花就是美图啦.边浏览边下载,自然是不错的:不过,好花不常开,好景不常在,想要便捷地保存下来,一个个地另存为还是很麻烦的.能不能批量下载呢? 只要获得图片地址,还是不难的. 目标  太平洋摄影网, 一个不错的摄影网站. 如果你喜欢自然风光的话,不妨在上面好好饱览一顿吧.饱览一顿,或许你还想打包带走呢.这并不是难事,让我们顺藤摸瓜地来尝试一番吧(懒得截图,自己打开网站观赏吧). 首先,我们打开网址 http://dp.pconlin

用python批量下载图片

一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么样的爬虫是违法的: 如果爬虫程序采集到公民的姓名.身份证件号码.通信通讯联系方式.住址.账号密码.财产状况.行踪轨迹等个人信息,并将之用于非法途径的,则肯定构成非法获取公民个人信息的违法行为.除此之外,根据相关规定,对于违反国家有关规定,向他人出售或者提供公民个人信息,情节严重的,窃取或者以其他方法

用python批量下载贴吧图片 附源代码

环境:windows 7 64位:python2.7:IDE pycharm2016.1 功能: 批量下载百度贴吧某吧某页的所有帖子中的所有图片 使用方法: 1.安装python2.7,安装re模块,安装urllib2模块 2.复制以下源代码保存为tbImgiDownloader.py文件 3.打开某个贴吧并复制其网址 4.打开文件tbImgiDownloader.py在第37行的单引号中输入网址,保存  5.双击tbImgiDownloader.py 说明: 1.本程序每次可以下载大概50个贴

Python批量下载百度贴吧贴子图片

批量下载贴吧里面某个贴子的所有图片,或者只下载某一页中的图片. #!/usr/bin/env python3 import re import urllib.request class DownTiebaImg: def __init__(self, url): self.url = url def getImgLinks(self): response = urllib.request.urlopen(self.url) pattern = re.compile(r'<img class=&quo

python批量下载图片的三种方法

一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: selenium则提供了Chrome,IE,FireFox等的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(包括修改元素)和读取html里面的元素.不足是selenium只提供对python2.6和2.7的支持. 三是用python自带的

用python批量下载wallheaven网站图片

这要从很早以前说起,那个时候是刚开始玩Ubuntu,但是ubuntu的壁纸不太好看,所以我就想方设法找到很漂亮的壁纸来替换原先的,但是我又想让壁纸像幻灯片一样播放,但是ubuntu不像windows,没有这样的功能,所以只能上网找办法来解决,最后终于在ubuntu论坛看到了variety这个东东,这个东西用起来确实很酷,可以自己编辑图片源,但是它本身默认带了几个源,而恰好其中就有wallheaven(那个时候还是wallpaper,之后网站改了叫做wallheaven),所以我就到wallhea

Python爬虫下载美女图片(不同网站不同方法)

声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从而获取图片地址 3. Python测试类下载图片,保存成功则爬虫可以实现 二.豆瓣美女(难度:?) 1.  网址:https://www.dbmeinv.com/dbgroup/show.htm 浏览器里点击后,按分类和页数得到新的地址:"https://www.dbmeinv.com/dbgrou

python 批量下载美剧 from 人人影视 HR-HDTV

本人比较喜欢看美剧,尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的所有 HR-HDTV 的 ed2k下载链接,并按照先后顺序写入到文本文件,供下载工具进行批量下载.源代码如下: # python3 实现,下面的实例 3 部美剧爬完大概要 20 s import urllib.request import re def get_links(url, name='yyets'): data = urllib.request.urlopen(

自从会了Python在群里斗图就没输过,Python批量下载表情包!

导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: fake_useragent模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 爬的站长之家的表情包,链接: http://sc.chinaz.com/biaoqing/index.html 非常好爬,思路也很简单: ① 获得表情包所在地址:

Python 批量下载图片示例

使用Python find函数和urllib下载图片. #!/usr/bin/env python import time import urllib i = 0 url = ['']*10 name = ['']*10 con = urllib.urlopen('http://www.ithome.com/html/bizhi/164396.htm').read() src = con.find(r'/newsuploadfiles') end = con.find(r'.jpg',src)