我的编程空间,编程开发者的网络收藏夹
学习永远不晚

回车桌面图片爬取

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

回车桌面图片爬取

回车桌面图片爬取

今天我们就来爬爬这个网站 https://tu.enterdesk.com/ 这个网站能爬的资源还是很多的,但我就写一个例子,其他的可以根据思路去写。

首先还是先来分析下这个网站的图片获取过程
enter description here

我选择的是图库,先随便选择一个标签,我这选宠物吧
enter description here

哟,我们再看看有没有翻页 开启F12(开发者工具)

用不习惯火狐,还是开谷歌来看吧
enter description here

那么就访问看看?随便选取一个访问看看是不是能出图片
https://tu.enterdesk.com/chongwu/6.html

结果肯定是可以的啦

问题来了,现在怎么查看最后一页的页码是什么?一种是无限循环下去 直到 没有图片标签的时候报错,还有一种就是从源码中找出页码 那就得看有没有页码按钮 刚才滚轮比较快 现在慢一点 看有没有页码这些东西
enter description here

这网站还是有页码的,那说明在html源码中能找到页码数

两种方法:
F12工具选择元素
enter description here

Ctrl+U走一波 源代码直接搜索
enter description here

现在找到所有页码,接下来就是分析图片源地址了
enter description here

选择目标图片看看是不是源地址 原图 打开一看其实不是
https://up.enterdesk.com/edpic_360_360/4c/3e/c2/4c3ec2be7061121ad5994a9b51241fa3.jpg

现在再点击进去图片里面 发现是原图了 这时再选择图片查看标签的图片链接
enter description here

复制上图里面的链接 打开一看就是原图啦 看下图的链接 怎么那么熟悉?
enter description here

对比下两个链接
https://up.enterdesk.com/edpic_360_360/4c/3e/c2/4c3ec2be7061121ad5994a9b51241fa3.jpg

https://up.enterdesk.com/edpic_source/4c/3e/c2/4c3ec2be7061121ad5994a9b51241fa3.jpg

略缩图 edpic_360_360
原图 edpic_source

这下整体思路就有啦,我们可以获取略缩图的链接将url进行重构,形成原图链接,然后再批量下载就好啦!

开始撸代码了!!!

第一个是 class Spider(): 我们声明了一个类,然后我们使用 def __init__去声明一个构造函数

import requests
all_urls = []  # 我们拼接好的每一页链接

class Spider():
    # 构造函数,初始化数据使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 获取所有的想要抓取的URL
    def getUrls(self):
        #获取末页
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末页的标签提取末页的链接
        page_num = int(re.findall('(\d+)',res)[0])  #正则匹配 页码数
        global all_urls
        # 循环得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)

分析怎么提取末页链接如下图:
enter description here

这里我们采用多线程的方式爬取,引入下面几个模块

from bs4 import BeautifulSoup #解析html
import threading #多线程
import re #正则匹配
import time #时间

新增加一个全局的变量,而且是多线程操作,我们需要引入线程锁,避免资源同时写入出错。

all_img_urls = []       #所有图片链接
g_lock = threading.Lock()  #初始化一个锁

声明一个Producer的类,负责提取图片链接,然后添加到 all_img_urls 这个全局变量中

class Producer(threading.Thread):

    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        global all_urls
        while len(all_urls) > 0:
            g_lock.acquire()  # 在访问all_urls的时候,需要使用锁机制
            page_url = all_urls.pop(0)  # 通过pop方法移除第一个元素,并且返回该值
            g_lock.release()  # 使用完成之后及时把锁给释放,方便其他线程使用
            try:
                print("分析" + page_url)
                response = requests.get(page_url, headers=headers, timeout=3).text
                html = BeautifulSoup(response,'html.parser')
                pic_link = html.find_all(class_='egeli_pic_li')[:-1]
                global all_img_urls
                g_lock.acquire()  # 这里还有一个锁
                for i in pic_link:
                    link = i.find('img')['class="lazy" data-src'].replace('edpic_360_360','edpic_source')
                    all_img_urls.append(link)
                g_lock.release()  # 释放锁
                # time.sleep(0.1)
            except:
                pass

线程锁,在上面的代码中,当我们操作all_urls.pop(0)的时候,我们是不希望其他线程对他进行同时操作的,否则会出现意外,所以我们使用g_lock.acquire()锁定资源,然后使用完成之后,记住一定要立马释放g_lock.release(),否则这个资源就一直被占用着,程序无法进行下去了。

if __name__ == "__main__":

    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
    }

    target_url = 'https://tu.enterdesk.com/chongwu/%d.html'  # 图片集和列表规则

    print('开始获取所有图片页链接!!!')
    spider = Spider(target_url, headers)
    spider.getUrls()
    print('完成获取所有图片页,开始分析图片链接!!!')

    threads = []
    for x in range(10):
        gain_link = Producer()
        gain_link.start()
        threads.append(gain_link)

    # join 线程同步 主线程任务结束之后 进入阻塞状态 等待其他的子线程执行结束之后 主线程在终止
    for tt in threads:
        tt.join()

下面再定义一个DownPic类 用于下载图片

class DownPic(threading.Thread):
    
    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        while True:
            global all_img_urls
            # 上锁
            g_lock.acquire()
            if len(all_img_urls) == 0:  # 如果没有图片了,就解锁
                # 不管什么情况,都要释放锁
                g_lock.release()
                break
            else:
                t = time.time()
                down_time = str(round(t * 1000))  # 毫秒级时间戳
                pic_name = 'D:\\test\\'+ down_time + '.jpg'
                pic = all_img_urls.pop(0)
                g_lock.release()
                response = requests.get(pic, headers=headers)
                with open(pic_name, 'wb') as f:
                    f.write(response.content)
                    f.close()
                print(pic_name + '   已下载完成!!!')

可以看到利用了down_time = str(round(t * 1000)) 来生成毫秒级时间戳来命名图片 其实也可以获取图片的名称来命名 那就靠自己去写一个了

再从if __name__ == "__main__": 添加下面代码 用于开启多线程下载

 print('分析图片链接完成,开始多线程下载!!!')
    for x in range(20):
        download = DownPic()
        download.start()

整体流程就这么写完啦!run下代码
enter description here

Tips:跑这个代码需要在D盘创建test文件夹 或者自己修改代码实现其他功能

附出完整代码:

import requests
from bs4 import BeautifulSoup #解析html
import threading #多线程
import re #正则匹配
import time #时间


all_urls = []  # 我们拼接好的每一页链接
all_img_urls = []       #所有图片链接
g_lock = threading.Lock()  #初始化一个锁

class Spider():
    # 构造函数,初始化数据使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 获取所有的想要抓取的URL
    def getUrls(self):
        #获取末页
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末页的标签提取末页的链接
        page_num = int(re.findall('(\d+)',res)[0])  #正则匹配 页码数
        global all_urls
        # 循环得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)


#负责提取图片链接
class Producer(threading.Thread):

    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        global all_urls
        while len(all_urls) > 0:
            g_lock.acquire()  # 在访问all_urls的时候,需要使用锁机制
            page_url = all_urls.pop(0)  # 通过pop方法移除第一个元素,并且返回该值
            g_lock.release()  # 使用完成之后及时把锁给释放,方便其他线程使用
            try:
                print("分析" + page_url)
                response = requests.get(page_url, headers=headers, timeout=3).text
                html = BeautifulSoup(response,'html.parser')
                pic_link = html.find_all(class_='egeli_pic_li')[:-1]
                global all_img_urls
                g_lock.acquire()  # 这里还有一个锁
                for i in pic_link:
                    link = i.find('img')['class="lazy" data-src'].replace('edpic_360_360','edpic_source')
                    all_img_urls.append(link)
                g_lock.release()  # 释放锁
                # time.sleep(0.1)
            except:
                pass


class DownPic(threading.Thread):
    
    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        while True:
            global all_img_urls
            # 上锁
            g_lock.acquire()
            if len(all_img_urls) == 0:  # 如果没有图片了,就解锁
                # 不管什么情况,都要释放锁
                g_lock.release()
                break
            else:
                t = time.time()
                down_time = str(round(t * 1000))  # 毫秒级时间戳
                pic_name = 'D:\\test\\'+ down_time + '.jpg'
                pic = all_img_urls.pop(0)
                g_lock.release()
                response = requests.get(pic, headers=headers)
                with open(pic_name, 'wb') as f:
                    f.write(response.content)
                    f.close()
                print(pic_name + '   已下载完成!!!')


if __name__ == "__main__":

    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
    }

    target_url = 'https://tu.enterdesk.com/chongwu/%d.html'  # 图片集和列表规则

    print('开始获取所有图片页链接!!!')
    spider = Spider(target_url, headers)
    spider.getUrls()
    print('完成获取所有图片页,开始分析图片链接!!!')

    threads = []
    for x in range(10):
        gain_link = Producer()
        gain_link.start()
        threads.append(gain_link)

    # join 线程同步 主线程任务结束之后 进入阻塞状态 等待其他的子线程执行结束之后 主线程在终止
    for tt in threads:
        tt.join()

    print('分析图片链接完成,开始多线程下载!!!')
    for x in range(20):
        download = DownPic()
        download.start()

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

回车桌面图片爬取

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

回车桌面图片爬取

回车桌面图片爬取今天我们就来爬爬这个网站 https://tu.enterdesk.com/ 这个网站能爬的资源还是很多的,但我就写一个例子,其他的可以根据思路去写。首先还是先来分析下这个网站的图片获取过程我选择的是图库,先随便选择一个标签
2023-01-31

python中如何爬取汽车之家网站上的图片

这篇文章主要介绍了python中如何爬取汽车之家网站上的图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些?python的数据类型:1. 数字类型
2023-06-14

python爬虫如何爬取图片

这篇文章主要介绍了python爬虫如何爬取图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pytho
2023-06-14

python3.7---爬取网页图片

#!/usr/bin/pythonimport reimport urllibimport urllib.request #python3中urlopen、urlritrieve都在request库里面了,所以要导入此库def html
2023-01-31

使用Python爬虫爬取妹子图图片

最近在学习Python的爬虫部分。看到有网友在分享使用爬虫爬取各种网站的图片的代码,也想自己写个玩玩。今天花时间分析了一下妹子图网站的结构和HTML代码,使用urllib2和BeautifulSoup写出了一个自动下载妹子图网站图片的脚本。
2023-01-31

Python爬取地图瓦片

由于要在内网开发地图项目,不能访问在线的地图服务了,就想把地图瓦片下载下来,网上找了一些下载器都是需要注册及收费的,否则下载到的图都是打水印的,如下:因为地图瓦片就是按照层级、行、列规则组织的一张张图片(如下图,14是瓦片的级别,13478
2023-01-30

python-python爬取妹子图片

1 # -*- conding=utf-8 -*- 2 3 import requests 4 from bs4 import BeautifulSoup 5 import io 6 7 url = "https://www.m
2023-01-30

Python快速爬取车标网图片,以后不要说这什么车你不认识了!

当看到天边飞鸟,你会说:“落霞与孤鹜齐飞,秋水共长天一色。”而不是:“卧靠,好多鸟。”; 当你失恋时你低吟浅唱道:“人生若只如初见,何事秋风悲画扇。”而不是千万遍地悲喊:“蓝瘦,香菇!” 今天回家早,陪俩小爷在楼下遛弯,忽然听见一阵马达轰鸣声,嗖~~闪一辆跑车
Python快速爬取车标网图片,以后不要说这什么车你不认识了!
2014-07-14

python爬取网站美女图片

今天周五,项目刚刚上线完,有些时间,闲着无聊,继续复习爬虫,这次打算爬取网站的美女图片。得先找到目标,然后目标网站还不会反爬虫,因为自己只是小白,好了开始。寻找目标,发现了目标,哈哈 http://www.meizitu.com 里面图片按
2023-01-31

python爬取百度图片代码

import jsonimport itertoolsimport urllibimport requestsimport osimport reimport sysword=input("请输入关键字:")path="./ok"if no
2023-01-31

python如何爬取网页图片

要使用Python爬取网页图片,可以使用requests库来发送HTTP请求,然后使用beautifulsoup库或者正则表达式来解析网页内容,最后使用urllib库来下载图片。下面是一个简单的示例代码,可以爬取指定网页的所有图片并保存到本
2023-08-20

爬虫:输入网页之后爬取当前页面的图片和背

环境:py3.6核心库:selenium(考虑到通用性,js加载的网页)、pyinstaller颜色显示:colors.pycolors.py 用于在命令行输出文字时,带有颜色,可有可无。# -*- coding:utf-8 -*-## f
2023-01-30

python爬虫怎么获取图片

这篇文章主要讲解了“python爬虫怎么获取图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python爬虫怎么获取图片”吧!首先导入库给文件加入头信息,伪装成模拟浏览器访问实现翻页翻页多
2023-06-02

Python图片爬取方法总结

1. 最常见爬取图片方法对于图片爬取,最容易想到的是通过urllib库或者requests库实现。具体两种方法的实现如下:1.1 urllib使用urllib.request.urlretrieve方法,通过图片url和存储的名称完成下载。
2023-01-31

node.js怎么爬取知乎图片

这篇文章主要介绍“node.js怎么爬取知乎图片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node.js怎么爬取知乎图片”文章能帮助大家解决问题。原理初入爬虫的坑,没有太多深奥的理论知识,要获取
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录