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("全部下载完成,按回车键退出")

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pucharm激活码(JetBrains全家桶)「建议收藏」

    (pucharm激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9071407CR5-eyJsaWNlb…

  • pmos开关电路原理_高频开关电源电路图

    pmos开关电路原理_高频开关电源电路图​概述负载开关电路日常应用比较广泛,主要用来控制后级负载的电源开关。此功能可以直接用IC也可以用分立器件搭建,分立器件主要用PMOS加三极管实现。本文主要讨论分立器件的实现的细节。电路分析如下图所示R5模拟后级负载,Q1为开关,当R3端口的激励源为高电平时,Q2饱和导通,MOS管Q1的VGS<VGSth导通,R5负载上电,关断时负载下电。电路中R3为三极管Q2的限流电阻,R4为偏置电阻,R1R2为Q1的栅极分压电阻,C1C2为输出滤波电容。提出问题…

  • JS跳转代码_javascript跳转代码

    JS跳转代码_javascript跳转代码<scriptlanguage=”javascript”type=”text/javascript”>functionrequest(paras){varurl=location.href;varparaString=url.substring(url.indexOf(“?”)+1,url.length).split(“&”);varparaObj={}for(i=0;j=paraString[i];i++){paraObj[j.substrin

  • 深入理解双线性插值算法

    深入理解双线性插值算法引言看了好几篇关于双线性插值算法的博文,解释得都不好理解,不过下面这篇博文就解释得很好,以下内容均参考这篇:图像处理+双线性插值法双线性插值算法双线性插值算法是解决什么问题的(原理)?在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值、双线性插值、双三次插值、兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度,运用比较广…

  • pycharm及python安装详细教程_python基础教程

    pycharm及python安装详细教程_python基础教程python下载安装图文教程-Pycharm下载安装图文教程Python及Pycharm安装图文教程,供大家参考,具体内容如下为了学习Python我今天对它进行了安装,并将Python及Pycharm安装方法进行了分享,希望可以帮助到大家注:建议大家在安装过程中不要将软件安装到系统盘中。1、Python安装1)首先需要进入Python官网下载安装包,进入后点击Downloads找到如下界面:可以根据自己的系统下载适合的安装包下载完成后直接…

  • 日志记录—Java中的日志——Java.util.logging、log4j、commons-logging

    Java中的日志——Java.util.logging、log4j、commons-logging 学习和区别

发表回复

您的电子邮箱地址不会被公开。

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