python爬虫爬图片教程_爬虫爬取图片的代码

python爬虫爬图片教程_爬虫爬取图片的代码用Python爬虫来爬小姐姐本教程将教你从0开始走进Python爬虫1.我们先要知道Python爬虫的原理基本的Python爬虫原理很简单,分为三步获取网页源码通过分析源码并通过代码来获取其中想要的内容进行下载或其他操作话不多说直接开干注意!本教程只是为了快速入门爬虫并实现一个功能,不考虑代码写的漂不漂亮,规不规范先准备上我们的目标网页开始我用的工具是:JetBrai…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

用Python爬虫来爬写真网图片

1.我们先要知道Python爬虫的原理

基本的Python爬虫原理很简单,分为三步

  • 获取网页源码
  • 通过分析源码并通过代码来获取其中想要的内容
  • 进行下载或其他操作

话不多说直接开干

先准备上我们的目标网页

放图片不给过审。。。

开始

我用的工具是:JetBrains PyCharm 2019.1.1 x64

首先导入几个包

  • import requests
  • import urllib.request
  • import re
  • from bs4 import BeautifulSoup
  • import os
    导入相应的

遍历所有网页

先来看看网页结构
分页显示
在这里插入图片描述根据观察,除了第一页,其他页后缀都为*.html一共13页
所以我们可以通过for遍历所有页码

for num in range(13):

Jetbrains全家桶1年46,售后保障稳定

在这里插入图片描述
可以看到我们吧所有页面都便利了一遍
但是第一页比较奇葩他没有在浏览器里显示出来,应该是index.html
所以我们单独把第一页拎出来
最后就是这样:

for num in range(13):
    url = "https://www.meitulu.com/t/loli/" + str(num + 1) +  ".html"
    if num == 0:
        url = "https://www.meitulu.com/t/loli/" #第一页比较奇葩

接下来就是获取遍历到的每一页的HTML了

response = requests.get(url)
response.encoding='utf-8'
html = response.text
soup = BeautifulSoup(html,"html.parser")

这段主要就是向URL发送GET请求
把获取到的HTML代码存放在soup变量里

遍历所有图集

通过检查元素,我们可以看到每个图集对应的链接:
在这里插入图片描述我们先提前初始化好图集链接

youngerSister_url = []  # 初始化图集链接list

既然是链接,所以我们要获取所有标签中的src,用来进入每个图集

    a_link = soup.find_all('a') #所有a标签
    for link in a_link: #遍历所有链接
        u = link.get("href")

由于一个页面中不止有图集链接,也有其他链接,所以我们要进行筛选

if u != None:
    u2 = re.sub("\d","",u)  #获取连接类型
    if u2 == "https://www.meitulu.com/item/.html":
        if not(u in youngerSister_url):
            youngerSister_url.append(u)     #添加进列表
            print("获取到" + str(len(youngerSister_url)) + "份图集")
            os.system('cls')

具体原理大概就这样
接下来只用把每一页的图集都遍历一遍,并且用

urllib.request.urlretrieve(p_url, jpg_name) #下载

来下载

结果

一共获取到将近五万张图片
在这里插入图片描述
源码在这:

import requests
import urllib.request
import re
from bs4 import BeautifulSoup
import os
# 获取文件名
file_names = os.listdir("./") #获取所有文件名
#----------------------获取
youngerSister_url = []  # 初始化女生链接list
for num in range(13):
    url = "https://www.meitulu.com/t/loli/" + str(num + 1) +  ".html"
    if num == 0:
        url = "https://www.meitulu.com/t/loli/" #第一页比较奇葩
    response = requests.get(url)
    response.encoding='utf-8'
    html = response.text
    soup = BeautifulSoup(html,"html.parser")
    a_link = soup.find_all('a') #所有a标签
    for link in a_link: #遍历所有链接
        u = link.get("href")
        if u != None:
            u2 = re.sub("\d","",u)  #获取连接类型
            if u2 == "https://www.meitulu.com/item/.html":
                if not(u in youngerSister_url):
                    youngerSister_url.append(u)     #添加进列表
                    print("获取到" + str(len(youngerSister_url)) + "份图集")
                    os.system('cls')
print("共" + str(len(youngerSister_url)) + "个女生图集")
print("开始下载")
for link in range(len(youngerSister_url)): #进入图集
    print("开始下载第" + str(link + 1) + "份图集")
    # ----------------------获取
    url = youngerSister_url[link]
    response = requests.get(url)
    response.encoding = 'utf-8'
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    a_link = soup.find_all('p')  # 所有a标签
    for link in a_link:  # 获取图片数量
        p_text = link.text
        if not p_text.find("图片数量:"):
            print(p_text)
            num_start = p_text.index(":") + 2  # 查找字符串开始位置
            num_over = p_text.index("张") - 1  # 查找字符串结束位置
            p_num = int(p_text[num_start:num_over])
            break  # 结束循环
    num_url = re.sub("\D", "", url)  # 替换非数字字符
    print("女生编号:" + num_url)
    for link in range(p_num):  # 循环图片次数遍
        jpg_name  = num_url + "_"+ str(link + 1) + ".jpg"  #图片名
        if not(jpg_name in file_names): #文件如果存在就跳过
            p_url = "https://mtl.gzhuibei.com/images/img" + "/" + num_url + "/"  + str(link + 1) + ".jpg"
            html_head = requests.head(p_url)  # 用head方法去请求资源头
            re_code = html_head.status_code #返回请求值
            print(p_url)
            print("进度" + str(link + 1) + "/" + str(p_num))
            if re_code == 200:
                urllib.request.urlretrieve(p_url, jpg_name) #下载
            else:
                print("该连接无效,跳过!")
    print("第" + str(link + 1) + "份下载完成!")
input("全部下载完成,按回车键退出")

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223417.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月28日 下午7:22
下一篇 2025年6月28日 下午8:01


相关推荐

  • RocketMQ原理刨析

    RocketMQ原理刨析RocketMQ 原理本文类容基本上和 RocketMQdesi 类似 并无过多的改动 主要内容包括 RocketMQ 概述 主要是概念上的一些内容 RocketMQ 的特点以及消息发送 消费模型 RocketMQ 原理 mmap write 文件系统 数据存储结构 队列 刷盘策略 消息查询 消息过滤 事务消息 发送 订阅负载均衡 同步双写 异步复制 充分利用内存 消息堆积能力以及解决办法一 RocketMQ 概述 1 MessageFilte Broker 端消息过滤

    2026年3月18日
    2
  • java中int转string,string转int效率对比

    java中int转string,string转int效率对比string 转 int 两种方法 1 Interger parseInt String 2 Interger valueOf String intValue 第二种方法可以去看源码 实现了第一种方法 注释大概就是这样的意思 nbsp nbsp nbsp 返回一个包含整数的对象 nbsp nbsp nbsp 指定的 StringString 的值 这个说法是 nbsp nbsp nbsp 被解释为

    2026年3月26日
    2
  • mingw64镜像网站

    mingw64镜像网站mingw64 镜像网站 http files 1f0 de mingw

    2026年3月18日
    3
  • pycharm2021.5.2激活码(最新序列号破解)

    pycharm2021.5.2激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    49
  • 制作PFX证书

    制作PFX证书1、创建根证书密钥文件root.keyC:\Users\lijunlin>opensslgenrsa-des3-outroot.keyGeneratingRSAprivatekey,2048bitlongmodulus…………………………………………………………….+++.+++eis65537(0x10001)Enterpassphraseforroot.k

    2022年6月7日
    48
  • Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的。做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域的一些变化,也顺便总结了哪些区域会发生异常(内存溢出)问题。前一篇的话还是非常重要,请大家务必要多多阅读学习和掌握,因为这些基础的知识点会关联后续的一系列问题内容,如果前面没有先有一定的基础知识储…

    2022年2月28日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号