爬虫-豆瓣读书排行榜

获取数据

requests库

获取数据环节需要用到requests库。安装方式也简单

pip install requests

爬取页面豆瓣读书 Top 250

用requests库来访问

import requests
res = requests.get('https://book.douban.com/top250/')

解析:

  1. 导入requests库
  2. 调用了requests库中的get() 方法,传入URL 发送请求,并把收到的响应保存到变量res中

res长什么样呢?我们打印一下

变量res的值是<Response [418]>,怎么回事呢?

Response对象

    这是因为,HTTP 响应内容不单单包括客户端所请求的资源本身,还包含响应状态等信息。因此 requests 库选择将获取的响应打包为 Response 对象,方便我们通过类的 属性 或 方法 获取想要的内容。而当我们打印 Response 对象本身时,Python 会按照 requests 库约定好的方式,打印出类名(Response)和本次响应状态码。

<Response [418]>,说明本次响应状态为418,表明本次请求发生了客户端错误

消息头 headers

按照下面的步骤操作一下

  1. 点击练习上面的 URL,此时浏览器会在新标签页为你打开豆瓣读书 Top 250 页面;
  2. 页面加载完成后,打开网页开发者工具,切换到 Network 面板;
  3. 刷新页面;
  4. 在 Network 面板请求列表中找到名为 top250 的请求,并在请求详情页找到 Request Headers(请求头) 信息。

无论是浏览器想服务器发送请求,还是服务器想浏览器作出响应,这中间都会通过header传递附加信息。这些附加信息中就包含了我们爬虫程序伪装浏览器的关键。

观察请求列表中每条请求的消息头,我们会发现许多重复出现的名称,其中有一项名为 user-agent。(下面这个是我电脑上的,每个人的应该都有差异)

User-Agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36

我们只需要将需要附上的信息组织成 字典 的格式,再通过 headers 参数传递给 get() 方法,requests 库帮我们向服务器发送请求时,就会自动带上这些信息了。

import requests

# 定制消息头
headers = {
  # 消息头中有一项附加信息 user-agent
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
# 携带消息头向服务器发送请求
res = requests.get('https://book.douban.com/top250/', headers=headers)

伪装成功了!

requests 库早已把响应内容转换为 字符串 类型,保存到 Response 对象的 text 属性中,我们能很轻松地通过 . 运算符访问到:

import requests

headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
res = requests.get('https://book.douban.com/top250/', headers=headers)
print(res.text)

# 输出:
# <!DOCTYPE html>
# <html lang="zh-cmn-Hans" class="ua-mac ua-webkit book-new-nav">
# <head>
#   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
#   <title>豆瓣读书 Top 250</title>
# ...

返回的是HTML源代码。

解析数据

BeautifulSoup对象

解析数据我们需要用到BeautifulSoup对象。

安装

pip install bs4

导入

from bs4 import BeautifulSoup

说明文档主要说明两个关键信息:

  1. 创建 BeautifulSoup 对象 时,它会把 HTML/XML 文档解析成 树形结构
  2. BeautifulSoup 类继承自 Tag 类,因此 BeautifulSoup 类和 Tag 类有许多共用的方法。

创建

创建BeautifulSoup对象时,需要传入两个参数:

  1. 所需解析的 HTML 代码,即响应的文本内容(res.text);
  2. 用于解析 HTML 代码的 解析器,课程内使用的是 Python 内置解析器 html.parser(parser:解析器)。
# 导入 requests 库
import requests
# 从 bs4 库中导入 BeautifulSoup
from bs4 import BeautifulSoup

# 定制消息头
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
# 发送带消息头的请求
res = requests.get('https://book.douban.com/top250', headers=headers)
# 创建 BeautifulSoup 对象,解析响应的文本内容
soup = BeautifulSoup(res.text, 'html.parser')

执行结果

BeautifulSoup 对象 内部结构像一棵倒着生长的树,树根在上面,枝叶在下面,每个节点都对应着 HTML 代码中的一个元素。顺着这棵 HTML 文档树,我们就能定位到某个或某群具有相同特征的元素,从而提取出元素文本内容——也就是我们所需的数据。

HTML 文档树

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>我的网页</title>
  <style> body { background-color: #101324; color: #ffffff; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; } a { color: #1890ff; } code { background: rgba(255, 255, 255, 0.15); padding: 0 6px; border-radius: 4px; color: rgba(255, 255, 255, 0.87); } img { width: 100%; } </style>
</head>
<body>
  <h2>Web 真好玩!</h2>
  <p>今天我在 <a href="https://web.shanbay.com/codetime-study/pc/uduni">爬虫课第 2 关</a> 学到了这些内容:</p>
  <ol>
    <li>HTML 基本语法</li>
    <li>HTML 文档结构</li>
    <li>Elements 面板 <code>Edit text</code> 功能</li>
  </ol>
  <p>其中常见的 HTML 元素有这些:</p>
  <img src="https://media-image1.baydn.com/storage_media_image/svpyor/ff5185b0ab456965c9f89c7506ed0a9e.bff6930d34f5dca7819b5e571f421b9b.png">
</body>
</html>

该 HTML 文档根节点为 html 元素。它有两个子节点,分别是 head 元素 和 body 元素。再往内推,head 与 body 内也分别包含诸多元素。我们将这些元素按照 根节点 – 子节点 – 子节点的子节点…… 顺序从上至下梳理出的图谱,就是 HTML 文档树

一棵文档树就像是这些元素的族谱:

  1. html 元素是所有其它元素的 祖先,反过来说,其它元素都是 html 的 后代
  2. head 元素和 body 元素的 父节点 是 html 元素,因此它们是 html 的 直接后代
  3. 由于 head 和 body 父节点相同,所以它们互为 兄弟节点

提取数据

通过css选择器提取

CSS 选择器

CSS 选择器是 CSS 语言中的一部分,能通过 HTML 元素的 类型标识 和 关系 快速选择符合条件的 所有元素。

靠 class 属性值检索的选择器被称为 类选择器,需要写成 .class_name,表示检索所有 class 属性值为 class_name 的元素。靠 id 属性值检索的被称为 ID 选择器,写成 #id_name,表示检索所有 id 属性值为 id_name 的元素。

元素与元素之间的关系可以分为 祖先 – 后代祖先 – 直接后代兄弟 – 兄弟 三类,因此两个元素之间的组合关系也分为三种:

  1. A B:检索 A 元素 后代 中的所有 B 类型元素;
  2. A > B:检索 A 元素 直接后代 中所有 B 类型元素;
  3. A ~ B:检索 A 元素 兄弟 中所有 B 类型元素。

总结一下,选择器分为两大类:

  1. 基本选择器:通过元素的 类型class 属性值id 属性值 检索;
  2. 组合选择器:通过元素和元素之间的 关系 检索,分为 直接后代组合器后代组合器 和 兄弟组合器

我们需要从豆瓣读书 Top 250 页面中提取出每本书的 书名作者 和 出版社 信息。通过检查元素我们发现,每本书的结构是一致的,并且书名信息都在 a 元素之中:

根据上面学习的方法,什么样的css选择器可以定位到书名信息所在的a元素呢?

div.pl2 > a 和 div.pl2  a 均可。

select() 方法

BeautifulSoup 对象 有一个名为 select() 的方法,我们将 CSS 选择器 传进去,它会返回一个列表,列表中每个元素都是符合条件的检索结果。

# 前面代码省略,soup 为解析好的 BeautifulSoup 对象
book_name_tags = soup.select('div.pl2 a')
print(book_name_tags)
# 输出:
# [<a href="https://book.douban.com/subject/1007305/" onclick="&quot;moreurl(this,{i:'0'})&quot;" title="红楼梦">
#                 红楼梦                
#               </a>, <a href="https://book.douban.com/subject/4913064/" onclick="&quot;moreurl(this,{i:'1'})&quot;" title="活着">
#                 活着                
#               </a>, <a href="https://book.douban.com/subject/6082808/" onclick="&quot;moreurl(this,{i:'2'})&quot;" title="百年孤独">
#                 百年孤独
#               </a>, ...]

print(type(book_name_tags[0]))
# 输出:<class 'bs4.element.Tag'>

可以看到,所有书名信息所在元素都被我们提取出来了。并且通过打印 book_name_tags 列表第一个元素的数据类型我们发现,它是一个特殊的数据类型,Tag 类。正如我在介绍 BeautifulSoup 对象时说过的,BeautifulSoup 类继承自 Tag 类。我们通过 select() 方法获得的一个个节点,是一个个 Tag 对象

Tag对象

Tag 类有许多实用的属性和方法,最为常用的是以下三个

  1. tag.text  获取标签的文本内容
  2. tag['属性名']  获取标签 HTML 属性的值
  3. tag.select() 方法  返回被选择器选助攻的所有元素

是的,Tag 类也有 select() 方法——这是因为,BeautifulSoup 类中的 select() 方法就是继承自 Tag 类的。除此之外,我们还能通过 Tag 对象的 text 属性访问到该元素的 元素内容,通过 Tag对象['元素属性名称'] 形式访问到该元素的某个属性的值。

比如对于 book_name_tags 列表中第一个元素来说

book = book_name_tags[0]
print(book)
# 输出:
# <a href="https://book.douban.com/subject/1007305/" onclick="&quot;moreurl(this,{i:'0'})&quot;" title="红楼梦">
#                 红楼梦                
#               </a>

我们可以通过 book.text 获取元素内容,通过 book['href'] 获取图书链接。

print(book['title'])
# 输出:红楼梦

同样的道理,我们可以编写代码提取出每本书作者、出版社信息所在元素

# 前面代码省略,soup 为解析好的 BeautifulSoup 对象
book_info_tags = soup.select('p.pl')
print(book_info_tags)
# 输出:
# [<p class="pl">[清] 曹雪芹 著 / 人民文学出版社 / 1996-12 / 59.70元</p>, <p class="pl">余华 / 作家出版社 / 2012-8-1 / 20.00元</p>, <p class="pl">[哥伦比亚] 加西亚·马尔克斯 / 范晔 / 南海出版公司 / 2011-6 / 39.50元</p>, ...]

可以看到,书籍信息存在于 p 元素的 文本内容 中,我们可以通过 text 属性获取。每条书籍信息则由若干项组成,依次是作者、译者(如果为外文作品)、出版社、出版年份、图书价格,每项中间用 / 分割。因此我们在提取图书作者、出版社信息时可分以下四步:

  1. 遍历 book_info_tags 中每个元素;
  2. 对每个元素,通过 text 属性获取书籍信息,保存到 info 里;
  3. 按 / 分割 info 字符串,得到列表 info_list
  4. info_list 中 第一项元素 是作者信息,倒数第三项元素 是出版社信息。
# 前面代码省略,soup 为解析好的 BeautifulSoup 对象
book_info_tags = soup.select('p.pl')
# 遍历所有书籍信息元素
for info_tag in book_info_tags:
  # 获取书籍信息
  info = info_tag.text
  # 按“ / ”分割字符串
  info_list = info.split(' / ')
  # 结果列表中第一项为作者信息
  author = info_list[0]
  # 倒数第三项为出版社信息
  publisher = info_list[-3]
  print(author, publisher)

# 输出:
# [清] 曹雪芹 著 人民文学出版社
# 余华 作家出版社
# [哥伦比亚] 加西亚·马尔克斯 南海出版公司
# ...

 下面是整体代码

# 导入 requests 库
import requests
# 从 bs4 库导入 BeautifulSoup
from bs4 import BeautifulSoup

# 定制消息头
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
# 向 https://book.douban.com/top250/ 发送带消息头的请求
# 并将响应结果储存到 res 变量中
res = requests.get("https://book.douban.com/top250/", headers=headers)

# 将响应结果的文本内容解析为 BeautifulSoup 对象
# 并保存到变量 soup 中
soup = BeautifulSoup(res.text, 'html.parser')

# 所有书名所在元素
book_name_tags = soup.select('div.pl2 a')
# 所有书籍信息所在元素
book_info_tags = soup.select('p.pl')
print(book_info_tags)
# 遍历每本图书
for i in range(len(book_name_tags)):
  # 通过元素 title 属性提取书名
    name = book_name_tags[i]['title']
  # 获取书籍信息
    info = book_info_tags[i].text
  # 按“ / ”分割字符串
    info_list = info.split("/")
  # 结果列表中第一项为作者信息
    author = info_list[0]
  # 倒数第三项为出版社信息
    publisher = info_list[-3]
  # 打印书名、作者、出版社信息
    print(name, author, publisher)

下面是返回的结果

[<p class="pl">[清] 曹雪芹 著 / 人民文学出版社 / 1996-12 / 59.70元</p>, <p class="pl">余华 / 作家出版社 / 2012-8 / 20.00元</p>, <p class="pl">[英] 乔治·奥威尔 / 刘绍铭 / 北京十月文艺出版社 / 2010-4-1 / 28.00</p>, <p class="pl">J.K.罗琳 (J.K.Rowling) / 苏农 / 人民文学出版社 / 2008-12-1 / 498.00元</p>, <p class="pl">刘慈欣 / 重庆出版社 / 2012-1 / 168.00元</p>, <p class="pl">[哥伦比亚] 加西亚·马尔克斯 / 范晔 / 南海出版公司 / 2011-6 / 39.50元</p>, <p class="pl">[美国] 玛格丽特·米切尔 / 李美华 / 译林出版社 / 2000-9 / 40.00元</p>, <p class="pl">[英] 乔治·奥威尔 / 荣如德 / 上海译文出版社 / 2007-3 / 10.00元</p>, <p class="pl">林奕含 / 北京联合出版公司 / 2018-2 / 45.00元</p>, <p class="pl">[明] 罗贯中 / 人民文学出版社 / 1998-05 / 39.50元</p>, <p class="pl">[英] 阿·柯南道尔 / 丁钟华 等 / 群众出版社 / 1981-8 / 53.00元/68.00元</p>, <p class="pl">[日] 东野圭吾 / 刘姿君 / 南海出版公司 / 2013-1-1 / 39.50元</p>, <p class="pl">[法] 圣埃克苏佩里 / 马振骋 / 人民文学出版社 / 2003-8 / 22.00元</p>, <p class="pl">(丹麦)安徒生 / 叶君健 / 人民文学出版社 / 1997-08 / 25.00元</p>, <p class="pl">金庸 / 生活·读书·新知三联书店 / 1994-5 / 96.00元</p>, <p class="pl">三毛 / 哈尔滨出版社 / 2003-8 / 15.80元</p>, <p class="pl">鲁迅 / 人民文学出版社 / 1973-3 / 0.36元</p>, <p class="pl">【美】傅高义 (Ezra.F.Vogel) / 冯克利 / 生活·读书·新知三联书店 / 2013-1-18 / 88.00元</p>, <p class="pl">[德] 赫尔曼·黑塞 / 姜乙 / 天津人民出版社 / 2017-1 / 32.00元</p>, <p class="pl">[美] 哈珀·李 / 高红梅 / 译林出版社 / 2012-9 / 32.00元</p>, <p class="pl">当年明月 / 中国海关出版社 / 2009-4 / 358.20元</p>, <p class="pl">[意] 埃莱娜·费兰特 / 陈英 / 人民文学出版社 / 2018-7 / 62.00元</p>, <p class="pl">[意] 埃莱娜·费兰特 / 陈英 / 人民文学出版社 / 2017-4 / 59.00元</p>, <p class="pl">鲁迅 / 人民文学出版社 / 1973-3 / 0.20元</p>, <p class="pl">王小波 / 中国青年出版社 / 1997-10 / 27.00元</p>]

红楼梦 [清] 曹雪芹 著 人民文学出版社

活着 余华 作家出版社

1984 [英] 乔治·奥威尔 北京十月文艺出版社

哈利·波特 J.K.罗琳 (J.K.Rowling) 人民文学出版社

三体全集 刘慈欣 重庆出版社

百年孤独 [哥伦比亚] 加西亚·马尔克斯 南海出版公司

飘 [美国] 玛格丽特·米切尔 译林出版社

动物农场 [英] 乔治·奥威尔 上海译文出版社

房思琪的初恋乐园 林奕含 北京联合出版公司

三国演义(全二册) [明] 罗贯中 人民文学出版社

福尔摩斯探案全集(上中下) [英] 阿·柯南道尔 1981-8

白夜行 [日] 东野圭吾 南海出版公司

小王子 [法] 圣埃克苏佩里 人民文学出版社

安徒生童话故事集 (丹麦)安徒生 人民文学出版社

天龙八部 金庸 生活·读书·新知三联书店

撒哈拉的故事 三毛 哈尔滨出版社

呐喊 鲁迅 人民文学出版社

邓小平时代 【美】傅高义 (Ezra.F.Vogel) 生活·读书·新知三联书店

悉达多 [德] 赫尔曼·黑塞 天津人民出版社

杀死一只知更鸟 [美] 哈珀·李 译林出版社

明朝那些事儿(1-9) 当年明月 中国海关出版社

失踪的孩子 [意] 埃莱娜·费兰特 人民文学出版社

新名字的故事 [意] 埃莱娜·费兰特 人民文学出版社

野草 鲁迅 人民文学出版社

沉默的大多数 王小波 中国青年出版社

 

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

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

相关文章

昇思14天

ResNet50图像分类 1. ResNet50图像分类概述 ResNet50是一种用于图像分类的深度卷积神经网络。图像分类是计算机视觉的基本应用&#xff0c;属于有监督学习范畴。ResNet50通过引入残差结构&#xff0c;解决了深层网络中的退化问题&#xff0c;使得可以训练非常深的网络。 2. …

看到指针就头疼?这篇文章让你对指针有更全面的了解!

文章目录 1.什么是指针2.指针和指针类型2.1 指针-整数2.2 指针的解引用 3.野指针3.1为什么会有野指针3.2 如何规避野指针 4.指针运算4.1 指针-整数4.2 指针减指针4.3 指针的关系运算 5.指针与数组6.二级指针7.指针数组 1.什么是指针 指针的两个要点 1.指针是内存中的一个最小单…

Apache中使用CGI

Apache24 使用Visual Studio 2022 // CGI2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <stdlib.h>#include <stdio.h>void main() {//设置HTML语言printf("Content-type:text/html\n\n&q…

Ansys Zemax|什么是点扩散函数( PSF )

附件下载 联系工作人员获取附件 概览 这篇文章讲述了&#xff1a; 什么是点扩散函数&#xff1f; 点列图 快速傅里叶变换计算的点扩散函数&#xff08;FFT PSF&#xff09; 惠更斯算法计算的点扩散函数&#xff08;Huygens PSF&#xff09; 如何使用非序列模式下的透镜和…

地下水环评(一级)实践技术及Modflow地下水数值模拟

主要围绕的环评导则&#xff0c;结合不同行业类别&#xff0c;实例讲解地下水环境影响评价的原则、内容、工作程序、方法。包括数据处理分析、数值模型构建以及环评报告编写等。涉及地下水流场绘制软件&#xff08;Surfer&#xff09;的操作流程及数据处理、地下水数值模拟软件…

JVM:类的生命周期

文章目录 一、介绍二、加载阶段三、连接阶段1、验证阶段2、准备阶段3、解析阶段 四、初始化阶段 一、介绍 类的生命周期描述了一个类加载、连接&#xff08;验证、准备和解析&#xff09;、初始化、使用、卸载的整个过程。 二、加载阶段 加载&#xff08;Loading&#xff09…

【论文速读】| JADE:用于大语言模型的基于语言学的安全评估平台

本次分享论文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者单位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 关键…

JavaWeb__正则表达式

目录 1. 正则表达式简介2. 正则表达式体验2.1 验证2.2 匹配2.3 替换2.4 全文查找2.5 忽略大小写2.6 元字符使用2.7 字符集合的使用2.8 常用正则表达式 1. 正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用于对字符串模式匹配及检索替换&#xff0c;是对字符串执行…

用SurfaceView实现落花动画效果

上篇文章 Android子线程真的不能刷新UI吗&#xff1f;(一&#xff09;复现异常 中可以看出子线程更新main线程创建的View&#xff0c;会抛出异常。SurfaceView不依赖main线程&#xff0c;可以直接使用自己的线程控制绘制逻辑。具体代码怎么实现了&#xff1f; 这篇文章用Surfa…

vue 中 使用腾讯地图 (动态引用腾讯地图及使用签名验证)

在设置定位的时候使用 腾讯地图 选择地址 在 mounted中引入腾讯地图&#xff1a; this.website.mapKey 为地图的 key // 异步加载腾讯地图APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…

C++11中重要的新特性之 lambda表达式 Part two

序言 在上一篇文章中&#xff0c;我们主要介绍了 C11 中的新增的关键词&#xff0c;以及 范围for循环 这类语法糖的使用和背后的逻辑。在这篇文章中我们会继续介绍一个特别重要的新特性分别是 lambda表达式 。 1. lambda表达式 1.1 lambda的定义 C11 中的 lambda表达式 是一种…

APB总线协议

一、APB总线介绍 关于总线的一些概念&#xff1a; 总线&#xff1a;计算机内部和计算机之间传输数据的共用通道。 总线位宽&#xff1a;总线能够一次性传送的二进制数据位数&#xff0c;例如8bit、16bit、32bit、64bit等。 总线工作频率&#xff1a;即时钟频率&#xff08;时…

PHP实现用户认证与权限管理的全面指南

目录 引言 1. 数据库设计 1.1 用户表&#xff08;users&#xff09; 1.2 角色表&#xff08;roles&#xff09; 1.3 权限表&#xff08;permissions&#xff09; 1.4 用户角色关联表&#xff08;user_roles&#xff09; 1.5 角色权限关联表&#xff08;role_permissions…

【内网渗透】内网渗透学习之域渗透常规方法

域渗透常规方法和思路 1、域内信息收集1.1、获取当前用户信息1.1.1、获取当前用户与域 SID1.1.2、查询指定用户的详细信息 1.2、判断是否存在域1.2、查询域内所有计算机1.3、查询域内所有用户组列表1.4、查询所有域成员计算机列表1.5、获取域密码信息1.6、获取域信任信息1.7、查…

最短路径算法:Dijkstra算法探险记

想象一下,你是一只小蚂蚁,名字叫小明。你住在一个大大的花园里,这个花园有很多小路,小路之间还有交叉点,就像是一个迷宫一样。现在,你接到了一个任务:找到从你家到花园里一个特定地方(比如一块超级大的糖果)的最短路径! 第一步:画出地图 首先,我们需要一张地图来…

YOLOv8改进 | 注意力机制 | 增强模型在图像分类和目标检测BAM注意力【小白必备 + 附完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

【模块化与包管理】:解锁【Python】编程的高效之道

目录 1.什么是模块&#xff1f; 2. 模块的导入过程 3. 理解命名空间 4. import语句的多种形式 5. 模块的执行与重新导入 6. 包&#xff08;Package&#xff09; 7. sys模块和os模块 sys模块 常用属性 示例&#xff1a;使用sys模块 os模块 常用功能 示例&#xff1…

前端埋点数据收集和数据上报

原文地址 什么是埋点 学名叫时间追踪(Event Tracking), 主要针对用户行为或者业务过程进行捕获&#xff0c;处理和发送相关技术及实施过程. 埋点是数据领域的一个专业术语&#xff0c;也是互联网领域的俗称&#xff0c;是互联网领域的俗称 埋点是产品数据分析的基础&#xf…

【AIGC】一、本地docker启动私有大模型

本地docker启动私有大模型 一、最终效果中英文对话生成代码 二、资源配置三、搭建步骤启动docker容器登录页面首次登录请注册登录后的效果 配置模型尝试使用选择模型选项下载模型选择适合的模型开始下载 试用效果返回首页选择模型中英文对话生成代码 四、附录资源监控 五、参考…

动手学深度学习54 循环神经网络

动手学深度学习54 循环神经网络 1. 循环神经网络RNN2. QA 1. 循环神经网络RNN h t h_t ht​ 与 h t − 1 h_{t-1} ht−1​ x t − 1 x_{t-1} xt−1​有关 x t x_t xt​ 与 h t h_t ht​ x t − 1 x_{t-1} xt−1​ 有关 怎么把潜变量变成RNN–假设更简单 潜变量和隐变量的区…