B站python爬虫课程笔记(Q16-19结束)

  下面是学习的网址:

​​​​​​【Python+爬虫】

目录

16、捕捉异常try&except语句的一些问题

1)一些常见的异常类型

2)try&except的使用

 17、测试Bug的一些问题

1)assert断定函数的使用

2)unittest单元测试库的一些问题

18、爬虫操作的一些问题

1)爬虫步骤

2)禁止爬取!

3)HTTP请求的三点知识

 4)python代码请求伪装成浏览器请求

5)Beautiful Soup库的使用

6)爬取豆瓣250电影

7)精进爬虫

19、HTML的一些问题

 1)网页三要素

2)HTML常用标签

尾声


16、捕捉异常try&except语句的一些问题

1)一些常见的异常类型

IndexError索引错误ZeroDivisionError除零错误
FileNotFindError找不到文件错误TypeError类型错误
KeyError键错误ValueError值错误
IndentationError缩进错误ImportError导入模型错误
ArithmeticError计算错误SyntaxError语法错误
AttributeError属性错误............

对于我这个初学者,出现最多的应该是SyntaxError语法错误了,不是忘记冒号,就是忘记语法应该怎么用了。

2)try&except的使用

我也贴上我自己有注释的代码:

try:  # 下面缩进写可能会出现错误的地方
    user_weight = float(input("请输入您的体重(单位:斤):"))
    user_height = float(input("请输入您的身高(单位:厘米):"))
    user_BMI = (user_weight / 2) / ((user_height / 100) ** 2)
except ValueError:  # except后面直接加可能出现的错误类型,这个错误类型必须显示为一个独特的颜色,这里为值错误类型
    print("输入不为合理数值,请重新运行程序,并输入正确的数字。")
except ZeroDivisionError:  # 此处为除零错误类型
    print("身高不能为零,请重新运行程序,并输入正确的数字。")
except:
    print("发生了未知错误,请重新运行程序。")
else:
    print("您的BMI值为" + str(user_BMI))  # 都没有错误的话输出BMI值
finally:
    print("程序运行结束")
    # 无论是否有错误,最终输出都会打印这一句话

 对于第三个except后面没有跟错误类型,PyCharm是会有警告的,但是没有影响,因为它默认后面是需要填一个错误类型的。

 17、测试Bug的一些问题

1)assert断定函数的使用

"assert + 布尔值表达式",用这种方法来测试用例,但是缺点是一行报错就会中止(AssertionError断言错误),后面的用例也就不能测试了。

2)unittest单元测试库的一些问题

下图是unittest。TestCase类的常见测试方法:

 !!!这一部分实在是太难了,建议多看看原视频,我贴上UP主的代码。

# 这是实现代码
class ShoppingList:
    """初始化购物清单,shopping_list是字典类型,包含商品名和对应价格
    例子:{"牙刷": 5, "沐浴露": 15, "电池": 7}"""
    def __init__(self, shopping_list):
        self.shopping_list = shopping_list

    """返回购物清单上有多少项商品"""
    def get_item_count(self):
        return len(self.shopping_list)

    """返回购物清单商品价格总额数字"""
    def get_total_price(self):
        total_price = 0
        for price in self.shopping_list.values():
            total_price += price
        return total_price
# 这是测试代码
'''
注意:此文件是针对以下类的测试文件。
你可以在此文件同一文件夹下新建shopping_list.py,并复制以下内容到该文件:

class ShoppingList:
    """初始化购物清单,shopping_list是字典类型,包含商品名和对应价格
    例子:{"牙刷": 5, "沐浴露": 15, "电池": 7}"""
    def __init__(self, shopping_list):
        self.shopping_list = shopping_list

    """返回购物清单上有多少项商品"""
    def get_item_count(self):
        return len(self.shopping_list)

    """返回购物清单商品价格总额数字"""
    def get_total_price(self):
        total_price = 0
        for price in self.shopping_list.values():
            total_price += price
        return total_price
'''

import unittest
from shopping_list import ShoppingList

class TestShoppingList(unittest.TestCase):
    def setUp(self):
        self.shopping_list = ShoppingList({"纸巾": 8, "帽子": 30, "拖鞋": 15})

    def test_get_item_count(self):
        self.assertEqual(self.shopping_list.get_item_count(), 3)

    def test_get_total_price(self):
        self.assertEqual(self.shopping_list.get_total_price(), 55)

 要测试的时候需要在终端输入: python -m unittest 回车。

此处的shopping_list实现代码的文件名Shoppinglist是需要测试的对象,如定义的函数等。

为了避免后面重复编写相同的开头测试语句,在定义类的第一个函数运用了setUp(self)

18、爬虫操作的一些问题

1)爬虫步骤

第一步、获取网页内容(python的Requests请求优雅地发送HTTP请求);

第二步、解析网页内容(python的Beautiful Soup库解析获得的HTML内容);

第三步、存储(数据库)或是分析(可视化)数据。

2)禁止爬取!

  1. 涉及公民隐私、copyright、国家安全的不要爬取;
  2. 不要过度频繁发送请求,导致其他用户无法使用服务器(无异于DDos攻击);
  3. 出现明显反爬取限制就不要继续突破去爬取了;
  4. 可以查看网站的robots.txt文件,哪些路径搜索是允许爬取的/不被允许的。

3)HTTP请求的三点知识

我不生产知识,我只是 知识的搬运工!哈哈哈

下面我贴出三张图,分别代表User_Agent的类型及表示意思HTTP请求能够接受的格式HTTP响应的状态码及对应信息

 

HTTP请求操作涉及requests.get , requests.status_code , requests.ok ,requests.text 操作,UP主演示代码如下:

import requests
head = {"User_Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}  # 浏览器类型及版本和操作系统信息等等
response = requests.get("http://books.toscrape.com/", headers=head)
print(response)
print(response.status_code)
if response.ok:
    print(response.text)
else:
    print("请求错误")

需要注意的是requests需要首字母大写, 这个单词是复数

 4)python代码请求伪装成浏览器请求

有些网址限制代码请求,只允许浏览器请求,伪装的操作只需要在requests第一行添加一个开头header,此开头head为字典,里面的键值对可以输入你想要输入的User_Agent的相关信息及其他信息。如:

head = {"User_Agent": "Mozilla/5.0(Windows NT 10.0; Win 64; X64)"}  # 浏览器类型及版本和操作系统信息等等

User_Agent的信息如何获取:打开浏览器搜索任意网站--鼠标右击打开检查--网络--刷新一下--打开任意一个请求--展开Request_Headers--复制User_Agent后面冒号的内容即可。like this:

5)Beautiful Soup库的使用

手动解析HTML内容效率低,使用Beautiful Soup库来像树状结构分类来解析自己想要的部分。

 UP主给出的安装bs4库(pip install bs4)安装成功信息是:

Successfully installed beautifulsoup4-4.12.3 bs4-0.0.2 soupsieve-2.5

 网友说的安装方式(pip install beautifulsoup4)我也试过,应该是同一个东西,只不过PyChram版本不一样,所以安装指令不一样。我再允许这个指令终端提示我已经安装成功了:

(.venv) PS F:\pycharm\project_for_begginer\pythonProject> pip install beautifulsoup4
Requirement already satisfied: beautifulsoup4 in f:\pycharm\project_for_begginer\pythonproject\.venv\lib\site-packages (4.12.3)
Requirement already satisfied: soupsieve>1.2 in f:\pycharm\project_for_begginer\pythonproject\.venv\lib\site-packages (from beautifulsoup4) (2.5)

findAll()函数:根据标签、属性等找出所有符合要求的元素。第一个元素为找到HTML的标签如p为文本段落标签,第二个元素如class属性的值是price_color。

all_prices = soup.findAll("p", attrs={"class", "price_color"}) 

由于此课程是解析HTML的内容,所以Beautiful Soup的第二个可选参数解析器要选择“ html.parser ”。

 下面是分别爬取书单价格书单名称的代码:

# 爬取当前网址页面(http://books.toscrape.com/)的书单价格
from bs4 import BeautifulSoup
import requests
head = {"User_Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}  # 浏览器类型及版本和操作系统信息等等
content = requests.get("http://books.toscrape.com/", headers=head).text
soup = BeautifulSoup(content, "html.parser")
# all_prices = soup.findAll("p", attrs={"class", "price_color"})
all_prices = soup.find_all("p", attrs={"class", "price_color"})  # findAll和find_all在这里运行的结果都一样,返回一个可迭代对象
for price in all_prices:
    print(price.string[2:])
# 爬取当前网址页面(http://books.toscrape.com/)的书单名称
from bs4 import BeautifulSoup
import requests
head = {"User_Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}  # 浏览器类型及版本和操作系统信息等等
content = requests.get("http://books.toscrape.com/", headers=head).text
soup = BeautifulSoup(content, "html.parser")
all_titles = soup.findAll("h3")
for title in all_titles:
    all_links = title.findAll("a")
    for link in all_links:
        print(link.string)

需要注意的是content为 .text的格式文件。 

6)爬取豆瓣250电影

直接给出UP主代码:

import requests
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/109.0.0.0 Safari/537.36"
}
for start_num in range(0, 250, 25):
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    all_titles = soup.findAll("span", attrs={"class": "title"})
    for title in all_titles:
        title_string = title.string
        if "/" not in title_string:
            print(title_string)

哈哈哈,我现在爬取出来的250名不是我爱你而是燃情岁月了。

需要注意的是for和range结合的更新网址索引开头的代码,不然只会给你爬取特定网页页面的内容,而有许多内容是分很多页的。

这里需要把豆瓣250电影排名的地址stat=0修改成?start={start_num} 

7)精进爬虫

  • python正则表达式库 re :使用更加精简代码爬取内容;
  • python多线程库 threading :顾名思义,让不同线程同时爬取多个页面,增加爬虫的效率,缩短爬取大量网页所需要花费的时间

19、HTML的一些问题

鼠标右键检查,点击左上角那个鼠标可以查看当前页面任意部位的HTML源代码,太厉害了。

 1)网页三要素

网页包括三要素,这些都是属于前端的内容了:

  • HTML 定义网页的结构和信息(骨架);
  • CSS 定义网页的样式(衣服);
  • JavaScript 定义用户和网页的交互逻辑(动作)。

 最简单的HTML代码:

<!DOCTYPE HTML>  #文件类型为html
<html>           #开始标识
</html>          #结束标识     

中间还能添加许多其他标签在里面,用CSS进行美化,用JavaScript进行交互。师傅领进门,修行靠个人!

2)HTML常用标签

CSDN有很多人整理出来了,不知道要用什么的可以直接去他们的博文看看(推荐一个传送门🚪:HTML常用标签--整理篇),至于具体怎么用可以看看B站UP主的视频,或者直接搜它的用法什么的。

尾声

至此此课程已经结束,后面内容比较高深我也没有精力再去深思,感觉自己还是没有什么热情来更进一步学习爬虫爬取一些什么其他内容(主要是用不到)。希望之后想要用的时候看看这些笔记能帮我回忆起一些课程中需要注意的事项吧,不要重蹈覆辙了。

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

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

相关文章

2024年阿里云优惠活动整理_云服务器活动大全

2024阿里云优惠活动大全包括云服务器优惠价格、优惠券免费领取入口、域名优惠口令、域名优惠、云数据库优惠活动、对象存储OSS优惠活动、企业邮箱优惠、阿里云建站优惠、无影云电脑优惠价格、CDN特惠等&#xff0c;阿里云服务器网aliyunfuwuqi.com长期更新阿里云优惠活动大全&a…

哈希表(c++)

1、介绍 哈希表&#xff0c;也称为散列表&#xff0c;是一种非常高效的数据结构。它通过将键&#xff08;Key&#xff09;映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数&#xff08;Hash Function&#xff09;完成&#xff0c;该函数将键转化为一个…

【浅尝C++】C++基础第三弹=>内联函数/auto关键字/范围for/nullptr(含如何查看内联函数展开效果)

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f6a9;一些备注&#xff1a;之前的文章有点杂乱&#xff0c;这里将前面的知识点重新组织了&#xff0c;避免了过多冗余的废话。 &#x1f3af;每日努力一点点&#xff0c;技术变化看…

【已解决】MySQL(Navicat)中如何一次性执行多个sql脚本文件

目录 问题现象&#xff1a; 问题分析&#xff1a; 思路&#xff1a; 解决方法&#xff1a; 1、运行cmd命令窗口 2、执行文本文件内容合并命令 总结&#xff1a; 1、使用文本文件内容合并命令&#xff0c;将多个sql脚本文件的内容合并到一个新的sql文件中去。 2、然后在Nav…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.1 基础知识

2.1.1 总账模块的基本功能 总账模块&#xff08;General Ledger&#xff0c;GL&#xff09;是“总分类账会计模块”的中文简称&#xff0c;它是财务会计&#xff08;FI&#xff09;模块的一个子模块&#xff0c;它是一切会计事务处理的核心模块。 它的基本功能有会计科…

3、Jenkins持续集成-Jenkins安装和插件管理

文章目录 一、Jenkins安装1. 安装JDK2. 获取jenkins安装包3. 安装包上传到服务器&#xff0c;进行安装4. 修改Jenkins配置&#xff08;1&#xff09;低版本Jenkins的rpm包&#xff08;2&#xff09;高版本Jenkins的rpm包 5. 启动Jenkins6. 打开浏览器访问7. 获取并输入admin账户…

1240. 完全二叉树的权值

给定一棵包含 N 个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从上到下、从左到右的顺序依次是 A1,A2,⋅⋅⋅AN&#xff0c;如下图所示&#xff1a; 现在小明要把相同深度的节点的权值加在一起&#xff0c;他想知道哪个深度的节点权值之和最大&#x…

在抖音上开店,运营什么产品好卖?市场才是关键点!

大家好&#xff0c;我是电商小布。 很多来加入抖音小店的新手朋友&#xff0c;都是看到了这个项目的发展情况&#xff0c;并认为未来的发展也是不错的。 但是很多朋友在入驻的时候&#xff0c;是并没有搞清楚自己要来玩什么&#xff0c;要卖什么的。 而这个是我们在开店之前…

c++的学习之路:3、入门(2)

一、引用 1、引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 怎么说呢&#xff0c;简单点理解就是你的小名&#xff0c;家里人叫你小名&#…

EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)

EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测&#xff08;Matlab&#xff09; 目录 EI级&#xff01;高创新原创未发表&#xff01;VMD-TCN-BiGRU-MATT变分模态分解卷积神经…

最长公共子序列详解:状态表示的两种方法

本题链接&#xff1a;897. 最长公共子序列 - AcWing题库 给定两个长度分别为 N 和 M 的字符串 A 和 B&#xff0c;求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 本题分析如下图&#xff0c;对于状态可以分两种情况讨论 #include<iostream> #include<cst…

递归和递推的区别

目录 1、递推 2、递归 3、结言 递归 递推 1、递推 递推就是说从初值出发后一直运算到所需的结果。 ——从已知到未知。&#xff08;从小到大&#xff09; 举一个简单的例子&#xff1a; 每天能学习一个小时的编程&#xff0c;那么一个月之后可以学到三十小时的编程知识。…

mysql面试,事务四大特性,mvcc版本控制,3个重要日志,索引结构,索引失效,innodb引擎执行流程,主从复制,锁,page页

大纲 事务4大特性 https://blog.csdn.net/king_zzzzz/article/details/136699546 Mvcc多版本控制 https://blog.csdn.net/king_zzzzz/article/details/136699546 3个重要日志 https://blog.csdn.net/king_zzzzz/article/details/136868343 索引 mysql 索引&#xff08;…

MySQL面试题--最全面-索引

目录 一、索引 1.MySQL是如何让实现的索引机制&#xff1f; 2.InnoDB索引与MyISAM索引实现的区别是什么&#xff1f; 3.一个表中如果没有创建索引&#xff0c;那么还会创建B树吗&#xff1f; 4.说一下B树索引实现原理&#xff08;数据结构&#xff09; 5.聚簇索引与非聚簇…

【数据挖掘】实验4:数据探索

实验4&#xff1a;数据探索 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据探索&#xff0c;学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二&#xff1a;实验内容 1&#xff1a;数据质量分析 2&#xff1a;统计量分析 3&#xff1a;贡献度分析…

2024.3.23

1、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否…

Linux :环境基础开发工具

目录: 1. Linux 软件包管理器 yum 1. 什么是软件包 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 2. Linux开发工具 1. Linux编辑器-vim的基本概念 2. vim使用 3. vim的基本操作 4. vim正常模式命令集 5. vim末行模式命令集 6. 简单vim配置 3. Linux编译器-gcc/…

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动&#xff1a; EntitySet&#xff1a;DbContext包含…

体育竞赛成绩管理系统设计与实现|jsp+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

什么是皮尔逊、斯佩尔曼和肯德尔相关性系数

代码实现&#xff1a; import numpy as np from scipy.stats import pearsonr, spearmanr,kendalltau #什么是皮尔逊、斯佩尔曼和肯德尔相关性系数 # 生成示例数据 x np.array([1, 2, 3, 4, 5]) y np.array([5, 6, 7, 8, 7])# 计算皮尔逊相关系数 pearson_coef, pearson_p …