废柴日记8:从入门到入狱的Python爬虫学习笔记1(入门篇)

在这里插入图片描述


前言:我错了,但下次也不一定(●’◡’●)

米娜桑,好久不见,不知道这段时间各位手中的西瓜刀有没有按时擦亮呢?

我也是在摸爬滚打将近一年之后总算是找到了一点人生的方向所以当成救命稻草现在正死死握紧不放手的啊。
这一年真的是经历了很多,发生了很多事,做了很多次选择,但可能我身上已经被锁定了『反向预测』的笨拙诅咒导致走了很多弯路,但好在是好好的活到了出头之日了。
(抽奖的事一直在参与,从未被选中,呜呜呜,岷叔!)
(没错,永恒mc更新啦!!!所以我现在是边看岷叔边写博客,为人民服务!!!)

在这里插入图片描述
总之,之后就开始恢复更新了。内容的话更多的会偏向于一些知识的学习笔记。同时也包括一些其他软件的使用教程,mathematicas的使用之后也会继续更新的,敬请期待。

那么思索了很久之后,决定先开始Python爬虫的学习。
因为这对于学(you)习(xi)资源的收集具有很大的帮助,算是Rain氏科技树的根源工具。


教学资源(持续更新…)

本次Python爬虫学习所用的网络资源如下所示,如果有更好的资源还请慷慨分享,谢谢!

1. 【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)的Python+爬虫公开课程,从入门到(不)入狱 !


一. 爬虫的基本流程

一般爬虫的基本流程包含三步:获取网页内容解析网页内容存储数据

图1.1 基本三步曲
接下来本篇将主要介绍获取网页内容解析网页内容的相关信息以及如何使用Python中的requests库与BeautifulSoup库完成该工作。


二. 获取网页内容

2.1 相关概念

获取网页内容的基本方式:客户端向服务端发送HTTP请求。

HTTP,全称Hypertext Transfer Protocol,又称超文本传输协议。

当服务端收到请求之后,会向客户端返回一个状态码与其他内容。
以下为常见的响应状态码:

在这里插入图片描述

我知道我知道,各位来看我的博客那肯定不是想看这些书本定义的,是想看整活的,我懂得我懂得。
那么接下来,我们就以三国的角度来看一下这些状态码的含义。

首先,我们将发送HTTP请求的客户端,也就是我们,比作是张翼德大将军;
而服务器,则比作是诸葛村夫军师 ;
HTTP请求,就看作是张将军的请战令。
在这里插入图片描述
那么上面的状态码,实际上就和下面的情况类似:

2.1.1 状态码以2开头(例如200)

在这里插入图片描述

2.1.2 状态码以3开头(例如301)

在这里插入图片描述

2.1.3 状态码以4开头(例如最常见的404)

在这里插入图片描述

2.1.4 状态码以5开头(例如500)

在这里插入图片描述
HTTP请求在结构上一般包含三个部分:请求行、请求头与请求体,类型上可分为GET请求与POST请求。具体信息如下所示。
在这里插入图片描述

2.2 Python实现—Requests

可以用于实现获取网页内容的方法有很多,这次我们先介绍如何使用requests库进行该工作。

2.2.1 相关库的安装

pip install requests

在这里插入图片描述
这里也提供一篇参考文章:requests库的详细安装过程

2.2.2 代码实现

# 发送Http请求
import requests

# 要爬取的网站
url = "https://books.toscrape.com"

# 设置请求头,将爬虫伪装成浏览器身份,反爬措施
# 具体内容请详见B站学习视频
headers = {
	# 这里最好填自己电脑上的,用F12查看
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.41"
}

# 发送Http请求
response = requests.get(url=url, headers=headers)
# 响应码,响应成功为200
print(response.status_code)
# 响应状态,成功为True
print(response.ok)
# 网站内容,类型为字符串
print(response.text)

三. 解析网页内容

3.1 相关概念

在我们成功获取到网站内容之后,便要开始进行数据清洗工作,也就是解析网页内容。

一个网站的内容主要包含三部分:HTML代码、CSS代码与JavaScript代码。而对于我们来说,存储着网页结构与信息的HTML代码相对而言更加具有研究价值。
在这里插入图片描述
所以我们的数据清洗工作也主要是对HTML代码进行处理。

那么接下来,你会觉得我要讲HTML了。抱歉,这个东西我也有点无能为力了,还请参考上面的网络视频。
说起来,我不得不点一位我们学院的老师了。
某些人真的是够够的,一个web课一周就两节课,每次都不来,就让学生自己去机房对着课本敲代码。等到期末了终于看见人影了。
哎,自己肯定也是有问题的。

之后也会有前端学习的内容的,总不能因为别人的不对而阻止自己学习有趣的东西吧。

3.2 Python实现——BeautifulSoup

3.2.1 相关库的安装

pip3 install Beautifulsoup4 

在这里插入图片描述
这里也提供一篇参考文章:Python安装Bs4几种方法

3.2.2 代码实现

from bs4 import BeautifulSoup
import requests

url = "https://books.toscrape.com"

# 伪装爬虫, 设置请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.41"
}


def get_response_by_requests(url, headers):
    # 发起Http响应
    response = requests.get(url=url, headers=headers)
    return response

if __name__ == '__main__':
    response = get_response_by_requests(url=url, headers=headers)
    print(f"状态码:{response.status_code}")

    if response.ok:
        print("请求成功")
        # 获取网页的html源码
        html_text = response.text

        # 利用bs处理为树状结构,方便清洗
        # soup为树状结构
        soup = BeautifulSoup(html_text, "html.parser")

        # 先序遍历的第一个p标签内容
        print(soup.p)
        # 先序遍历的第一个img标签内容
        print(soup.img)

        # bs的findall方法
        # 查找网页中所有class属性为price_color的p标签
        all_prices = soup.findAll("p", attrs={"class": "price_color"})

        #Type : <class 'bs4.element.ResultSet'>
        print(f"Type:{type(all_prices)}")

        for price in all_prices:
            # price.string:标签包围的文本内容
            print(price.string)

        # 获得所有h3标签元素
        all_titles = soup.findAll("h3")
        for title in all_titles:
            # 获得所有的a标签元素
            all_links = title.findAll("a")
            for link in all_links:
                # 获得a标签包围的文本
                print(link.string)

    else:
        print("请求失败")

我第一次学爬虫时,当时用的解析器是lxml,这里用的是html.parser,建议挑选一个自己用着习惯的来。

相关资料:Beautiful Soup的用法(六):解析器的选择


四. 后话

练习的代码我没有放出来,是因为之前发过一个爬取链家房源的博客结果被下架了,再加上我这天天嚯嚯豆瓣给我封了好几次ip,我也不太敢搞了,所以还请自行尝试。

这一年下来热情什么的也有些被磨平了,再加上最近写论文导致可能写作风格和之前差异较大了,还请见谅。
但我仍然在努力保留着这一小团热情的火种,坚持下去。
任重而道远吧。


中二少年的日常

I stand upon my desk to remind myself that we must constantly look at things in a different way.

Just when you think you know something,you have to look at it in another way.Even though it may seem silly or wrong,you must try.

You must strive to find your own voice.Because the longer you wait to begin,the less likely you are to find it at all.

Thoread said,"Most men lead lives of quiet desperation."Don’t be resigned to that.Break out.

在这里插入图片描述


吾日三省吾身:日更否?思考否?快乐否?
更新了,但不是日更;我思故我在;fine.
路漫漫其修远兮,吾将上下而求索。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java八股文-并发篇

并发篇 1. 线程状态 要求 掌握 Java 线程六种状态掌握 Java 线程状态转换能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联 可运行 调用了 start …

2023全国计算机二级考试时间(全年各阶段考试时间安排)

2023全国计算机二级考试时间(全年各阶段考试时间安排) 2023年全国计算机二级考试时间分别为&#xff1a;3月25日至27日(上半年3月)、9月23日至25日(下半年9月)。 其中3月和9月开考全部级别全部科目&#xff0c;5月和12月考试开考一、二级全部科目&#xff0c;各省级承办机构可根…

SQL锁总结

一、概述 介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源(CPU、RAM、I/O)的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0c;锁…

12 VI——变分推断

文章目录 12 VI——变分推断12.1 背景介绍12.2 Classical VI12.2.1 公式导出12.2.2 坐标上升法 12.3 SGVI——随机梯度变分推断12.3.1 一般化MC方法12.3.2 降方差——Variance Reduction 12 VI——变分推断 12.1 背景介绍 变分推断的作用就是在概率图模型中进行参数估计&…

.mdf.locked加密sql server完美恢复---惜分飞

有可能用友ERP软件的sql server 数据库所在机器被勒索病毒加密,扩展名为.locked和昨天恢复的基本类似(.locked加密勒索数据库级别恢复),通过分析确认sql server被这种病毒加密,也可以完美恢复 通过恢复之后数据库正常挂载成功 测试应用一切正常 对于类似这种被加密的勒索的数…

Hazel游戏引擎(010)预编译头

文中若有代码、术语等错误&#xff0c;欢迎指正 文章目录 前言如何实现 前言 此节目的 由于项目中的头文件或者cpp文件都包含着c的头文件&#xff0c;有些重复&#xff0c;可以将它们包含的c头文件放在一个头文件内&#xff0c;这样不仅使代码简洁&#xff0c;而且预编译头可以…

chatgpt赋能python:Python如何取消空格提升SEO排名

Python如何取消空格提升SEO排名 作为一种高效的编程语言&#xff0c;Python已经成为了许多网站开发人员和SEO优化人员的首选工具。在网站优化中&#xff0c;取消空格是一个重要的优化技术&#xff0c;它可以提升网站速度&#xff0c;提高网站体验&#xff0c;同时也可以提升SE…

前后端交互二、form表单与模板引擎

零、文章目录 前后端交互二、form表单与模板引擎 1、form表单的基本使用 HTML相关知识请参考HTML入门 &#xff08;1&#xff09;表单是什么 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息的&#xff0c;并通过<…

【EasyX】实时时钟

目录 实时时钟1. 绘制静态秒针2. 秒针的转动3. 根据实际时间转动4. 添加时针和分针5. 添加表盘刻度 实时时钟 本博客介绍利用EasyX实现一个实时钟表的小程序&#xff0c;同时学习时间函数的使用。 本文源码可从github获取 1. 绘制静态秒针 第一步定义钟表的中心坐标center&a…

操作系统1-操作系统的基本特征和主要功能

目录 1、操作系统的目标和作用 &#xff08;1&#xff09;操作系统的目标 &#xff08;2&#xff09;操作系统的作用 2、操作系统的发展过程 &#xff08;1&#xff09;未配置操作系统的计算机系统 &#xff08;2&#xff09;单道批处理系统(Simple Batch Processing Sys…

Task Add-in Sample (C#)

下例显示了用 C# 编写Task Add-in 的完整源代码。 使用 C# 类库 &#xff08;.NET Framework&#xff09; 创建 Visual Studio 中的项目。实现 IEdmAddIn5。在“任务属性”对话框中创建自定义页。自定义任务详细信息页面。 注意&#xff1a; 若要填充下面的 GUID 属性&#x…

软考A计划-系统架构师-学习笔记-第三弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Redis 持久化机制

Redis 是个基于内存的数据库。那服务一旦宕机&#xff0c;内存中数据必将全部丢失。所以丢失数据的恢复对于 Redis 是十分重要的&#xff0c;我们首先想到是可以从数据库中恢复&#xff0c;但是在由 Redis 宕机时&#xff08;说明相关工作正在运行&#xff09;且数据量很大情况…

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法&#xff1a; for…

软考A计划-系统架构师-学习笔记-第二弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解&#xff08;五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

Redis常见问题、各个分布式锁优缺点-05

Redis集群为什么至少需要三个master节点&#xff0c;并且推荐节点数为奇数&#xff1f; 因为新master的选举需要大于半数的集群master节点同意才能选举成功&#xff0c;如果只有两个master节点&#xff0c;当其中一个挂了&#xff0c;是达不到选举新master的条件的。 奇数个ma…

【Linux】 -- TCP协议 (一)

TCP协议 Tcp协议可靠性冯诺依曼体系结构 TCP的协议格式序号与确认序号窗口大小六个标志位 确认应答机制 &#xff08;ACK&#xff09;超时重传机制连接管理机制 Tcp协议 TCP全称为 “传输控制协议”&#xff08;Transmission Control Protocol&#xff09; TCP协议被广泛应用…

C语言---形参所导致的段错误

前言 今天刷B站&#xff0c;无意之间看到一个宣称90%人都会错的嵌入式面试题。感兴趣就看了一下。卡了十多分钟才想明白&#xff0c;只是一个小知识点&#xff0c;但还是分享一下。 题目 #include <stdio.h> #include <stdlib.h> #include <string.h>void g…

信道编码的基本概念

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道编码信道编码的…