批量下载对路网图片并生成html的实现方法

我来为你详细讲解“批量下载对路网图片并生成html的实现方法”的完整攻略。

实现方法

确定目标图片网站

首先需要确定目标图片网站,找到需要下载的图片所在的页面

找到图片标签

在目标网站页面中,需要找到所有图片元素所对应的标签,通常是<img>标签

提取图片链接

提取每个图片标签中的src属性即可得到图片下载链接

下载图片

用python程序对获取的图片链接进行下载

生成HTML文件

通过python程序,在本地生成一个HTML文件,将所有下载的图片插入到HTML中,最后保存

示例说明

示例1:爬取bing首页每日一图

首先我们需要找到bing图片的下载链接,可以在bing首页右下角找到今天的背景图片。

接下来我们需要对bing图片网站页面中的许多元素进行爬取,根据css选择器获取每天的图片标签的data-src属性即可获取图片下载链接。

import requests
import os
from bs4 import BeautifulSoup

def get_bing_img():
    url = "https://cn.bing.com"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}
    html = requests.get(url, headers=headers)
    soup = BeautifulSoup(html.content, "html.parser")
    image_url = url + soup.find(id='bgImgProgLoad')['data-src']
    return image_url

得到图片的链接之后,就可以直接调用 requests 包来下载图片了。

def download_image(image_url):
    folder_path = './bing'
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    response = requests.get(image_url)
    with open(folder_path + '/' + image_url.split('/')[-1], 'wb') as f:
        f.write(response.content)
        print('Image downloaded')

然后我们通过pyppeteer库来自动化生成下载好的所有图片的html文件,pyppeteer可以通过python控制一个headless的Chrome来生成截图或执行JS代码,这里我们用它来生成html文件。

import asyncio
from pyppeteer import launch

async def generate_html():
    folder_path = './bing'
    file_list = os.listdir(folder_path)
    file_list.sort(key=lambda fn: os.path.getctime(folder_path + '/' + fn))
    html_text = []
    for i in range(len(file_list)):
        html_text.append('<img src="{}"/>'.format(folder_path + '/' + file_list[i]))
    html_file = './bing/bing.html'
    with open(html_file, 'w') as f:
        f.write(''.join(html_text))

    # Launch headless Chrome to screenshot example.com
    browser = await launch()
    page = await browser.newPage()
    await page.goto('file:' + html_file, {'waitUntil': 'networkidle0'})
    await page.screenshot({'path': './bing/bing.png', 'fullPage': True})

    # Close the browser
    await browser.close()

asyncio.get_event_loop().run_until_complete(generate_html())

执行完之后,会在本地生成一个bing.html文件,文件中包含了所有下载好的图片,可以使用浏览器打开确保生成的html文件正确。

示例2:爬取LOFTER某个用户的图片

在LOFTER某个用户的封面图中,图片下载链接和bing稍微有点不同,但是原理相同。

首先我们需要找到LOFTER某个用户的主页来爬取,但这里我们考虑的是通过用户输入的相册地址来爬取用户的图片。接下来和bing下载方法类似,我们需要找到LOFTER某个用户相册网站页面中的所有元素进行爬取。LOFTER相册页面中,每张图片对应的标签是<img>标签,且每张图片的下载链接是data-original属性,所以我们的核心代码如下所示。

def get_img_list(url):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"}
    response = requests.get(url, headers=header)
    html = response.content.decode('utf-8')
    bs = BeautifulSoup(html, "html.parser")
    # 找到页面中所有img标签,这些标签可以包含多个属性
    img_tags = bs.find_all("img", attrs={'class': 'imgc', 'data-original': re.compile(r'.+\.(gif|jpeg|jpg|png)$')})
    # 获取每个img标签的属性data-original中保存的地址。
    urls = [(tag.get('data-original'), tag.get('alt')) for tag in img_tags]
    return urls

这样我们就获得了图片的下载链接,接下来就是类似于bing的方法:

def download_image2(image_url, path):
    if not os.path.exists(path):
        os.makedirs(path)
    response = requests.get(image_url)
    with open(path + '/' + image_url.split('/')[-1], 'wb') as f:
        f.write(response.content)
        print('Image downloaded')

def download_images(url):
    img_urls = get_img_list(url)
    for img in img_urls:
        if img[0].endswith('.gif'):
            continue
        download_image2(img[0], './lofter')

下载完成之后,我们通过依葫芦画瓢的方式,将图片路径插入到html文件中去:

def generate_html2():
    folder_path = './lofter'
    file_list = os.listdir(folder_path)
    file_list.sort(key=lambda fn: os.path.getctime(folder_path + '/' + fn))
    html_text = []
    for i in range(len(file_list)):
        html_text.append('<img src="{}"/>'.format(folder_path + '/' + file_list[i]))
    html_file = './lofter/lofter.html'
    with open(html_file, 'w') as f:
        f.write(''.join(html_text))

当然在获取图片链接之后,你也可以选择使用异步协程的方式去下载图片。

以上就是通过python实现批量下载对路网图片并生成html的实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:批量下载对路网图片并生成html的实现方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP实现AES256加密算法实例

    下面是详细的讲解“PHP实现AES256加密算法实例”的攻略。 一、AES256加密算法简介 AES是Advanced Encryption Standard的缩写,中文名为高级加密标准,是一种对称加密算法。AES密钥长度可以为128位、192位或256位,这里我们介绍的是AES256。AES256加密算法在密码学领域是一种较为常见的加密方式,其加密和解密使…

    PHP 2023年5月27日
    00
  • 深入PHP数据缓存的使用说明

    深入PHP数据缓存的使用说明 数据缓存对于网站性能的提升有很大的作用,本文将详细讲解PHP数据缓存的使用。 简介 数据缓存可以提升请求速度,节约服务器资源,减少数据库负载和机器开销,让网站更加高效。在PHP中,可以使用多种方式实现数据缓存,例如:memcached、Redis、APC、文件缓存等。 使用步骤 安装缓存依赖库 首先需要根据缓存方式安装相应的依赖…

    PHP 2023年5月24日
    00
  • PHP中断言函数的使用详解

    PHP中断言函数的使用详解 什么是断言(assertion)? 在编程中,断言用于判断程序中的某个条件是否为真(true),如果条件为真,则程序会继续运行,如果条件为假(false),则程序将中断并抛出异常。 在PHP中,我们可以使用断言函数来进行条件判断。 PHP中的断言函数 PHP提供了两个常用的断言函数: assert($statement [, $d…

    PHP 2023年5月25日
    00
  • PHP动态生成javascript文件的2个例子

    让我为您详细讲解一下”PHP动态生成javascript文件的2个例子”的攻略。 首先,我们需要明确一下JavaScript是一种在客户端执行的脚本语言,而PHP是一种在服务器端执行的脚本语言。动态生成JavaScript文件,指的是在服务器端生成相应的JavaScript代码,然后让客户端去加载这些代码,这样可以减轻客户端的负担,提升网站的性能。 例子1:…

    PHP 2023年5月26日
    00
  • 一些常用的php简单命令代码集锦

    一些常用的PHP简单命令代码集锦 在PHP开发中,常用的一些PHP简单命令代码集锦可以提高代码编写效率。下面将为大家详细讲解这些常用的PHP命令。 输出 输出命令是开发中必不可少的。在PHP中,可以使用echo命令来输出字符串、变量、数组、对象等。示例代码如下: echo "Hello World!"; 输出结果: Hello World…

    PHP 2023年5月24日
    00
  • PHP+MySQL实现在线测试答题实例

    下面我将详细讲解“PHP+MySQL实现在线测试答题实例”的完整攻略,包括环境配置、数据库设计、后端代码实现等。 环境配置 在开始实现在线测试答题实例之前,我们首先需要搭建PHP+MySQL的开发环境。可以选择XAMPP或者WAMP等开发环境。以下为详细的环境配置步骤: 下载安装XAMPP或者WAMP; 启动Apache和MySQL; 访问localhost…

    PHP 2023年5月27日
    00
  • 教你如何在CI框架中使用 .htaccess 隐藏url中index.php

    以下是教如何在CI框架中使用 .htaccess 隐藏url中index.php 的完整攻略: 1. 准备工作 在开始使用 .htaccess 文件隐藏 url 中 index.php 前,需要确保以下两个条件已经满足: Apache web 服务器已经安装在你的电脑上。 mod_rewrite 模块已经启用。 如果你的环境中不符合上述条件,请先通过搜索引擎…

    PHP 2023年5月26日
    00
  • 用PHP与XML联手进行网站编程代码实例

    下面我将详细讲解使用PHP与XML联合编程的攻略。 前言 在网站编程中,我们常常需要使用到一些数据存储和数据交换的功能,而XML是存储和交换数据的一种常见格式。PHP可以很方便地读取和处理XML文件,因此PHP与XML联合编程是网站开发中非常常见的情况。 步骤 第一步:创建XML文件 我们可以使用任何一个文本编辑器来创建XML文件,下面是一个简单的例子: &…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部