IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【网络爬虫】Python爬取上百张二次元电脑壁纸 -> 正文阅读

[Python知识库]【网络爬虫】Python爬取上百张二次元电脑壁纸

1. 观察网站

https://konachan.net/post,这个网站上图的质量还不错:
在这里插入图片描述

而且提供了高级检索功能:
在这里插入图片描述
什么是 QuestionableExplicit ?我很好奇:
请添加图片描述

看了一下网站的Wiki,明白了:
在这里插入图片描述
由于本人电脑的显示分辨率是1920x1280,所以我希望电脑壁纸至少要有1920x1080或以上尺寸,所以在高级检索界面修改了一下 WidthHeight ,提交后检索结果如下:
在这里插入图片描述
F12检查网页,发现每张图片都被包含在一个 <li></li> 标签对中,大图的链接在其中的类名为 directlink largeimg<a></a> 标签对的 href 属性中:
在这里插入图片描述
翻页也很简单,就是在 https://konachan.net/post?page= 后面添加数字。有时候可能遇到某一页没有任何图片的情况,检查是否有 Nobody here but us chickens! 这句话或者判断图片节点的数量是否为零即可:
在这里插入图片描述


2. 实际代码

以下代码不保证没有Bug,如要使用请自行修改:

# -*- coding: utf-8 -*-
import os
import time
import requests
from bs4 import BeautifulSoup as BS

url = "https://konachan.net/post?page={}&tags=width:{}..+height:{}.." # 页面,宽度下限,高度下限
outDir = "C:" # 图片输出文件夹
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"}

# 输入URL,得到响应内容
def getResponse(url):
    try:
    	time.sleep(100) # 慢点爬
        r = requests.get(url, headers=headers)
        r.raise_for_status() # 响应状态码,出错则抛出异常 
        return r
    except Exception as ex: # 出错就递归抓取
        print(type(ex)) 
        return getResponse(url)

# 输入html,输出soup对象
def getSoup(html):
    return BS(html, "lxml")

# 输入soup,输出图片节点列表
def getImagesList(soup):
    images = soup.find_all("a", class_="directlink largeimg")
    return images

# 输入图片编号和URL,保存图片
def saveImage(imageNum, imageURL):
    if (os.path.exists(outDir) == False):
        os.mkdir(outDir)
    with open(outDir + "\\{}.png".format(imageNum), 'wb') as f:
        image = getResponse(imageURL).content
        f.write(image)

def process(endPage, width, height):
    imageNum = 1 # 以数字为图片命名
    for i in range(1, endPage):
        html = getResponse(url.format(i, width, height)).text
        soup = getSoup(html)
        imagesList = getImagesList(soup)
        for j in range(len(imagesList)):
            saveImage(imageNum, imagesList[j]['href'])
            imageNum = imageNum + 1

if __name__ == "__main__":
    # endPage = int(input("输入要抓取的终止网页页码:\n"))
    # width = int(input("输入图片最低宽度:\n"))
    # height = int(input("输入图片最低高度:\n"))
    endPage = 30 # 只抓取第1页到第30页的图片
    width, height = 1920, 1080
    process(endPage, width, height) # 从第1页抓取到第endPage页,图片尺寸大于(width,height)

3. 运行效果

下载的图片文件夹如下,大概263张,因为有几张是用户重复上传的:
在这里插入图片描述

放上一张能过审的:
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:09:51  更:2021-08-25 12:11:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:12:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码