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

news2024/11/15 14:07:49

在这里插入图片描述


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

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

我也是在摸爬滚打将近一年之后总算是找到了一点人生的方向所以当成救命稻草现在正死死握紧不放手的啊。
这一年真的是经历了很多,发生了很多事,做了很多次选择,但可能我身上已经被锁定了『反向预测』的笨拙诅咒导致走了很多弯路,但好在是好好的活到了出头之日了。
(抽奖的事一直在参与,从未被选中,呜呜呜,岷叔!)
(没错,永恒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.
路漫漫其修远兮,吾将上下而求索。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows 系统笔记】使用服务器运行装载AList+本地安装RaiDrive进行网盘本地挂载

文章目录 前言准备工作一、购买一台云服务器配置服务器安装宝塔面板新建网站进入当前目录 二、安装AList三、登录四、开启域名访问五、挂载阿里云盘刷新令牌 六、使用RaiDrive挂载到本地 前言 大家肯定很好奇我为什么要写一篇这样的文章&#xff0c;因为之前一直使用本地挂载网…

SQL索引

一、索引概述 介绍&#xff1a; 索引是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c;这样就可以…

【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

一种很好用&#xff0c;很高效&#xff0c;又一学就会的数据结构&#xff0c;你确定不看看&#xff1f; 一、哈希表 Hash Table1.1 核心概念1.2 哈希函数 Hash Function1.3 哈希冲突 Hash Collision1.4 哈希冲突解决1.41 方法概述1.42 链地址法 Separate Chaining1.43 开放寻址…

几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!

代码神器 自从大模型推出来之后&#xff0c;似乎没有什么工作是大模型不能做的。特别是在文本生成、文案写作、代码提示、代码生成、代码改错等方面都表现出不错的能力。下面我将介绍运用大模型写代码的几种方式&#xff0c;帮助程序员写出更好的代码&#xff01;&#xff08;…

华为OD机试真题 JavaScript 实现【一种字符串压缩表示的解压】【2022Q4 100分】,附详细解题思路

一、题目描述 有一种简易压缩算法&#xff1a;针对全部由小写英文字母组成的字符串&#xff0c;将其中连续超过两个相同字母的部分压缩为连续个数加该字母&#xff0c;其他部分保持原样不变。例如&#xff1a;字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。 请您编写解…

shell脚本学习记录(重定向)

Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。 输出重定向 重定向一般通过在命令间插入特定的符号来实现。特别的&#xff0c;这些符号的语法如下所示: command1 > file1 上面这个命令执行command1然后将输出的…

maven访问仓库的顺序

1.没有配置私服的情况下&#xff08;大部分情况下&#xff09; 如上图所示&#xff0c;maven是依次从本地仓库、中央仓库和第三方仓库获取依赖的&#xff0c;其实在maven中并不是以这三种类型区分的&#xff0c;在maven中只有两种仓库类型&#xff0c;本地仓库和远程仓库&#…

Systemverilog中的Driving Strength讲解

在systemverilog中&#xff0c;net用于对电路中连线进行建模&#xff0c;driving strength(驱动强度)可以让net变量值的建模更加精确。net变量拥有4态逻辑值(0,1,z,x)&#xff0c;它的driving strength有(supply,strong,pull,weak,highz)。net的值由连接到net的driver源(驱动源…

【开源工具】使用Whisper将提取视频、语音的字幕

这里写目录标题 一、语音转字幕操作步骤1、下载安装包Assets\WhisperDesktop.zip[^2]2、加载模型2.1 下载模型2.1.1 进入Hugging Face[^3]的仓库2.1.2 选择需要下载的模型2.1.3 配置模型路径 3、语音转字幕4、实时语言转录功能 二、相关简介[^1]特点开发人员指南构建说明其他注…

模拟退火(SA)算法

目录 模拟退火算法 主要代码 Mutate Sphere 模拟退火算法 主要代码 repmat 重复数组副本 B repmat(A,n) 返回一个数组&#xff0c;该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时&#xff0c;B 大小为 size(A)*n。 unifrnd 生成连续统一的随机数 sort 对数组进行…

抖音百科词条创建在哪里?

抖音作为中国火爆的短视频平台&#xff0c;拥有相当庞大的用户群体&#xff0c;用户在抖音上创建百科词条就可以获得非常可观的曝光和展现&#xff0c;抖音百科词条是通过哪种方式创建的呢&#xff1f;想要创建一个抖音百科怎么做&#xff1f;接下来伯乐网络传媒就来给大家讲一…

Linux之进程信号(上)

文章目录 前言一、进程信号二、查看命令kill -l与信号解释man 7 signal1.kill -l2.man 7 signal 三、信号的产生1.按键ctrl cctrl zctrl \ 2.系统调用kill——向任意进程发送信号raise——进程给自己发送任意信号abort——进程给自己指定的信号&#xff08;6号信号&#xff…

主流解压缩软件有哪些?这四款可以满足你的所有需求

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 第一款&#xff1a;bandizip&#xff08;推荐&#xff09; 第二款&#xff1a;7-zip 第三款&#xff1a;Nanazip 第四款&#xff1a…

Vue中如何进行表单自定义验证

Vue中如何进行表单自定义验证 在Vue应用中&#xff0c;表单验证是非常重要的一部分。Vue提供了一些内置的验证规则&#xff0c;比如required、min、max等。但是有时候我们需要对表单进行自定义验证&#xff0c;以满足特定的业务需求。本文将介绍如何在Vue中进行表单自定义验证…

第十章 数学相关

第十章 数学相关 第一节 集合 真题&#xff08;2010-53&#xff09;-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中&#xff0c;亚裔学者 31 人&#xff0c;博士 33 人&#xff0c;非亚裔学者中无博士学位的 4 人。根据上述陈述&#xff0c;参…

Java16:集合

一&#xff1a;Collecction接口 1.单列集合框架结构 》Collection接口&#xff1a;单列集合&#xff0c;用来存储一个一个的对象 》 List接口&#xff1a;存储有序的&#xff0c;可重复的数据---》动态数组&#xff0c;实现类&#xff1a;ArrayList&#xff0c;LinkedList,…

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv&#xff0c;绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…

【书影观后感 十四】左晖-做难而正确的事

距离上一本完整读完的书《李自成》及据此而作的读后感【书影观后感 十三】甲申三百七十八年祭已经接近一年时间了&#xff0c;最近心血来潮读了李翔的访谈形式系列《详谈》的第一本《左晖-做难而正确的事》。 虽然这本薄薄的书只有171页&#xff0c;访谈的形式也看似比较随意…

因果推断18--估计个体治疗效果:泛化界和算法CRF(个人笔记)

目录 1. 介绍 2. 相关工作 3.估计ITE&#xff1a;误差界 4. 估计ITE的算法 5.实验 5.1. 模拟结果&#xff1a;IHDP 5.2. 现实世界的结果&#xff1a;工作 5.3. 结果 6.结论 参考 英文题目&#xff1a;Estimating individual treatment effect: generalization bounds…

【Python plotly】零基础也能轻松掌握的学习路线与参考资料

Python plotly是一个优秀的数据可视化工具&#xff0c;通过使用Python语言和Plotly的图表支持库&#xff0c;可以轻松地创建交互式和动态图表&#xff0c;Python plotly的可视化效果美观且易于实现。 学习路线&#xff1a; Python基础语法和Numpy、Pandas基础学习 Python是一…