前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python爬虫爬图片教程_爬虫爬取图片的代码

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

作者头像
全栈程序员站长
发布2022-11-17 10:02:11
发布2022-11-17 10:02:11
99200
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

用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遍历所有页码

代码语言:javascript
代码运行次数:0
运行
复制
for num in range(13):

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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了

代码语言:javascript
代码运行次数:0
运行
复制
response = requests.get(url)
response.encoding='utf-8'
html = response.text
soup = BeautifulSoup(html,"html.parser")

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

遍历所有图集

通过检查元素,我们可以看到每个图集对应的链接:

我们先提前初始化好图集链接

代码语言:javascript
代码运行次数:0
运行
复制
youngerSister_url = []  # 初始化图集链接list

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

代码语言:javascript
代码运行次数:0
运行
复制
    a_link = soup.find_all('a') #所有a标签
    for link in a_link: #遍历所有链接
        u = link.get("href")

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

代码语言:javascript
代码运行次数:0
运行
复制
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')

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

代码语言:javascript
代码运行次数:0
运行
复制
urllib.request.urlretrieve(p_url, jpg_name) #下载

来下载

结果

一共获取到将近五万张图片

源码在这:

代码语言:javascript
代码运行次数:0
运行
复制
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.cn/223417.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用Python爬虫来爬写真网图片
    • 放图片不给过审。。。
    • 开始
    • 遍历所有网页
    • 遍历所有图集
    • 结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档