Python爬虫之入门保姆级教程,学不会我去你家刷厕所

article/2025/9/10 21:43:12

  • 注重版权,转载请注明原作者和原文链接
  • 作者:Bald programmer

今天这个教程采用最简单的爬虫方法,适合小白新手入门,代码不复杂

文章目录

  • 今天这个教程采用最简单的爬虫方法,适合小白新手入门,代码不复杂
    • 首先打开咋们的网站
      • 一、导入相关库(requests库)
      • 二、相关的参数(url,headers)
      • 三、向网站发出请求
      • 四、匹配(re库,正则表达式)
      • 五、获取图片,保存到文件夹中(os库)
      • 完整代码

爬虫的介绍以及原理等等七七八八的东西我就不多bb了,咋们直接上教程

本案例我就以 彼岸图网 这个网站做教程,原网址下方链接

https://pic.netbian.com/

首先打开咋们的网站

可以看到有很多好看的图片,一页总共21张图片
在这里插入图片描述
我们右键选择检查或者直接按F12来到控制台

点击左上角的箭头或者快捷键ctrl+shift+c,然后随便点在一张图片上面

在这里插入图片描述
在这里插入图片描述
这时候我们就能看到这张图片的详细信息,src后面的链接就是图片的链接,将鼠标放到链接上就能看到图片,这就是我们这次要爬的
在这里插入图片描述

一、导入相关库(requests库)

import requests

requests翻译过来就是请求的意思,用来向某一网站发送请求

二、相关的参数(url,headers)


我们回到刚刚的控制台,点击上方的Network,按下ctrl+r刷新,随便点开一张图片
在这里插入图片描述
在这里插入图片描述
这里我们只需要到两个简单的参数,本次案例只是做一个简单的爬虫教程,其他参数暂时不考虑

参数作用
Request URL发送请求的网站地址,也就是图片所在的网址
user-agent用来模拟浏览器对网站进行访问,避免被网站监测出非法访问


在这里插入图片描述
参数代码的准备

url = "https://pic.netbian.com/uploads/allimg/210317/001935-16159115757f04.jpg"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}

三、向网站发出请求


response = requests.get(url=url,headers=headers)
print(response.text) # 打印请求成功的网页源码,和在网页右键查看源代码的内容一样的

在这里插入图片描述
这时候我们会发现乱码?!!!!这其实也是很多初学者头疼的事情,乱码解决不难

# 通过发送请求成功response,通过(apparent_encoding)获取该网页的编码格式,并对response解码
response.encoding = response.apparent_encoding
print(response.text)

看着这些密密麻麻的一大片是不是感觉脑子要炸了,其实我们只需要找到我们所需要的就可以了
在这里插入图片描述

四、匹配(re库,正则表达式)


什么是正则表达式?简单点说就是由用户制定一个规则,然后代码根据我们指定的所规则去指定内容里匹配出正确的内容

我们在前面的时候有看到图片信息是什么样子的,根据信息我们可以快速找到我们要的
在这里插入图片描述
在这里插入图片描述
接下来就是通过正则表达式把一个个图片的链接和名字给匹配出来,存放到一个列表中

import re
"""
. 表示除空格外任意字符(除\n外)
* 表示匹配字符零次或多次
? 表示匹配字符零次或一次
.*? 非贪婪匹配
"""
# src后面存放的是链接,alt后面是图片的名字
# 直接(.*?)也是可以可以直接获取到链接,但是会匹配到其他不是我们想要的图片
# 我们可以在前面图片信息看到链接都是/u····开头的,所以我们就设定限定条件(/u.*?)这样就能匹配到我们想要的
parr = re.compile('src="(/u.*?)".alt="(.*?)"')
image = re.findall(parr,response.text)
for content in image:print(content)

在这里插入图片描述
这样我们的链接和名字就存放到了image列表中了,通过打印我们可以看到以下内容

image[0]:列表第一个元素,也就是链接和图片
image[0][0]:列表第一个元素中的第一个值,也就是链接
image[0][1]:列表第一个元素中的第二个值,也就是名字
在这里插入图片描述

五、获取图片,保存到文件夹中(os库)

首先通过os库创建一个文件夹(当前你也可以手动在脚本目录创建一个文件夹)

import os
path = "彼岸图网图片获取"
if not os.path.isdir(path):ok.mkdir(path)

然后对列表进行遍历,获取图片

# 对列表进行遍历
for i in image:link = i[0] # 获取链接name = i[1] # 获取名字"""在文件夹下创建一个空jpg文件,打开方式以 'wb' 二进制读写方式@param res:图片请求的结果"""with open(path+"/{}.jpg".format(name),"wb") as img:res = requests.get(link)img.write(res.content) # 将图片请求的结果内容写到jpg文件中img.close() # 关闭操作print(name+".jpg 获取成功······")

运行我们就会发现报错了,这是因为我们的图片链接不完整所导致的
在这里插入图片描述
我们回到图片首页网站,点开一张图片,我们可以在地址栏看到我们的图片链接缺少前面部分,我们复制下来 https://pic.netbian.com
在这里插入图片描述
在获取图片的发送请求地址前加上刚刚复制的https://pic.netbian.com在这里插入图片描述
运行,OK,获取完毕
在这里插入图片描述
在这里插入图片描述

完整代码

import requests
import re
import osurl = "https://pic.netbian.com/"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}response = requests.get(url=url,headers=headers)
response.encoding = response.apparent_encoding"""
. 表示除空格外任意字符(除\n外)
* 表示匹配字符零次或多次
? 表示匹配字符零次或一次
.*? 非贪婪匹配
"""
parr = re.compile('src="(/u.*?)".alt="(.*?)"') # 匹配图片链接和图片名字
image = re.findall(parr,response.text)path = "彼岸图网图片获取"
if not os.path.isdir(path): # 判断是否存在该文件夹,若不存在则创建os.mkdir(path) # 创建# 对列表进行遍历
for i in image:link = i[0] # 获取链接name = i[1] # 获取名字"""在文件夹下创建一个空jpg文件,打开方式以 'wb' 二进制读写方式@param res:图片请求的结果"""with open(path+"/{}.jpg".format(name),"wb") as img:res = requests.get("https://pic.netbian.com"+link)img.write(res.content) # 将图片请求的结果内容写到jpg文件中img.close() # 关闭操作print(name+".jpg 获取成功······")

本次教程到这里就结束了,是不是只爬了一页这么一点图片觉得不过瘾?

别急,下期我教大家如何获取十几页或者几十页甚至几百页的图片


  • 本次文章分享就到这,有什么疑问或有更好的建议可在评论区留言,也可以私信我
  • 感谢阅读~


http://chatgpt.dhexx.cn/article/yHsas0jq.shtml

相关文章

Java单元测试使用mock【转载】

1、什么是Mock? mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为。比如说你需要调用B服务,可是B服务还没有开发完成,那么你就可以将调用B服务的那部分给Mock掉,并编写你想要的返…

Java代码实现单元测试

单元测试:在编写java代码的时候,如果我们想去运行一个Java程序,那么必须创建一个main方法,但这样比较麻烦 比如现在我们想去测试HDFS的JavaAPI的文件上传和文件下载功能 如果使用main方法的话,那么我们需要创建两个J…

java单元测试(@Test)

初学者在写java代码的时候,可能会因为写一个小功能就要写一个类,写一个main方法而苦恼。其实java的工程师在很早的时候就提供了解决的方案。就是我们今天要讲 的Junit测试。 在使用的时候首先需要配置环境: 一、英文: 选中一个…

java单元测试方法的使用

单元测试方法的使用 java单元测试是最小的功能单位测试代码,我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,如果想要测试这些方法函数的…

java单元测试的编写及运行方法

java单元测试的方法 1、为什么要进行单元测试 因为单元测试相当于测试的某个功能点,不是针对整个业务进行的测试,例如如果只想调试某个类下的功能,但又想把多个类写在一个java文件里,就可以采用单元测试的方法 2、怎么创建及运…

Java单元测试框架 - JUnit

导航 我们为什么需要单元测试框架?为工程添加JUnit支持编写JUnit单元测试案例JUnit常用注解JUnit常用断言JUnit案例Spring整合 我们为什么需要单元测试框架? 当我们需要对一段代码进行测试时,怎么样让他快速跑起来呢?一个很自然的…

java单元测试之mock篇

java单元测试之mock篇 一、什么是mock?二、为什么要进行mock?三、IDEA中使用Mock3.1、引入mock所需依赖3.1、IDEA单元测试必备快捷键3.2、Mock测试相关注解Mock注解InjectMocks注解调用PowerMockito.spy()方法Mock使用方式或者技巧静态方法mockStaticPre…

Java单元测试之Mock框架

一、引言二、为什么要用Mock三、Mock使用场景四、Mock定义五、Mock框架五、Mockito5.1 Mockito基本使用5.2 MockMVC测试5.2.1 初始化MockMvc对象5.2.2 接口测试5.2.3 常用API 一、引言 实际工作中,可能会遇到如下情况: 场景一:依赖接口不通…

Java单元测试实践-01.单元测试概述与示例

Java单元测试实践-00.目录(9万多字文档700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. 前言 以下内容为本人以开发人员的视角,在平时进行单元测试过程中的总结。主要内容为通用的,不限制具体业务…

如何写Java单元测试

本文引自https://www.cnblogs.com/ysw-go/p/5447056.html 什么是单元测试   我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定…

Java单元测试总结

[版权申明] 非商业目的注明出处可自由转载 博文地址: 出自:shusheng007 文章目录 概述单元测试概念测试项目单元测试工具JUnitMockito SpringBoot测试总结 概述 关于为什么要做单元测试是老生常谈了,越是小公司越不重视单元测试,…

java单元测试junit

进行单元测试则需要添加junit的依赖&#xff1a; ##JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck. ##对于java来说JUnit是一个单元测试的框架<dependency><groupId>junit</groupId><artifactId>junit</arti…

Java 单元测试

什么是单元测试 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证&#xff0c;简单来说就是测试部分代码&#xff0c;对代码中的问题快速定位&#xff0c;及时修复。 什么是JUnit JUnit就是一个Java语言的单元测试框架…

JAVA基础之单元测试

目录 1、单元测试介绍 2、环境搭建 2.1 JUnit 4 2.2 JUnit 5 3、快速上手 3.1 JUnit 4 3.2 JUnit 5 1、单元测试介绍 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单元测试就是针对Java方法的测试…

Java基础单元测试

本篇博文目录: 1.单元测试(1) 测试Java方法(原生) 2. JUnit 5(1) JUnit 5简单使用的例子(2) JUnit5常用注解(3) JUnit5常用注解的使用(4).JUnit5内置断言 1.单元测试 单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;对…

如何进行Java 单元测试

一、概述 Java 单元测试是指对软件中的最小可测试单元进行测试&#xff0c;以保证代码的质量和正确性&#xff0c;并且可以加速开发过程。本文将全面详细地介绍 Java 单元测试相关知识点&#xff0c;包括单元测试的定义、优点和流程、JUnit 测试框架、Mockito 框架、持续集成、…

Java之单元测试(JUnit单元测试框架)

一、概述 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;所以单元测试就是针对Java方法的测试&#xff0c;进而检查方法的正确性。常规测试有什么问题&#xff1f; 只有一个main方法&#xff0c;如果一个方法的测试失败了…

(60)Java基础 --单元测试

目录 一、测试的概念 二、使用Junit4.x进行单元环境 1、环境搭建 2、使用步骤 3、常见注解 三、规范的Junit测试方式 四、断言 1、为什么要使用断言 2、什么是断言(猜测) 3、常用API 一、测试的概念 先认识到测试的重要性&#xff1a;优秀的软件不是开发出来的,而是…

微信小程序消息推送(订阅消息原模板消息)开发流程

注&#xff1a;模板消息没了。 正常开发肯定需要前后端配合&#xff0c;此处都在小程序里写了 参考文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html 订阅消息是个很好的功能&#xff0c;但是现在被不良商家…

小程序之模版消息通知

手把手教你开发微信小程序之模版消息通知 一、模板消息功能概述 模板推送位置&#xff1a;服务通知 模板消息效果展示图&#xff1a; 进入小程序通知&#xff1a; 二、开发前的配置准备 1、验证token是否有效 <?php/*** 验证*/public function valid(){$echoStr $_GET…