python爬虫之异常捕获及标签过滤详解
作者:一名小测试 发布时间:2021-08-10 07:32:06
标签:python,异常捕获,标签过滤
增加异常捕获,更容易现问题的解决方向
import ssl
import urllib.request
from bs4 import BeautifulSoup
from urllib.error import HTTPError, URLError
def get_data(url):
headers = {"user-agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
ssl._create_default_https_context = ssl._create_unverified_context
"""
urlopen处增加两个异常捕获:
1、如果页面出现错误或者服务器不存在时,会抛HTTP错误代码
2、如果url写错了或者是链接打不开时,会抛URLError错误
"""
try:
url_obj = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(url_obj)
html = response.read().decode('utf8')
except (HTTPError, URLError)as e:
raise e
"""
BeautifulSoup处增加异常捕获是因为BeautifulSoup对象中有时候标签实际不存在时,会返回None值;
因为不知道,所以调用了就会导致抛出AttributeError: 'NoneType' object has no xxxxxxx。
"""
try:
bs = BeautifulSoup(html, "html.parser")
results = bs.body
except AttributeError as e:
return None
return results
if __name__ == '__main__':
print(get_data("https://movie.douban.com/chart"))
解析html,更好的实现数据展示效果
get_text():获取文本信息
# 此处代码同上面打开url代码一致,故此处省略......
html = response.read().decode('utf8')
bs = BeautifulSoup(html, "html.parser")
data = bs.find('span', {'class': 'pl'})
print(f'电影评价数:{data}')
print(f'电影评价数:{data.get_text()}')
运行后的结果显示如下:
电影评价数:<span class="pl">(38054人评价)</span>
电影评价数:(38054人评价)
find() 方法是过滤HTML标签,查找需要的单个标签
实际find方法封装是调用了正则find_all方法,把find_all中的limt参数传1,获取单个标签
1.name:可直接理解为标签元素
2.attrs:字典格式,放属性和属性值 {"class": "indent"}
3.recursive:递归参数,布尔值,为真时递归查询子标签
4.text:标签的文本内容匹配 , 是标签的文本,标签的文本
find_all() 方法是过滤HTML标签,查找需要的标签组
使用方法适合find一样的,无非就是多了个limit参数(筛选数据)
必须注意的小知识点:
# 下面两种写法,实际是一样的功能,都是查询id为text的属性值
bs.find_all(id="text")
bs.find_all(' ', {"id": "text"})
# 如果是class的就不能class="x x x"了,因为class是python中类的关键字
bs.find_all(class_="text")
bs.find_all(' ', {"class": "text"})
来源:https://blog.csdn.net/LIFENG0402/article/details/116754853


猜你喜欢
- 前言在vue项目中我们经常使用到 v-show ,v-if,v-for等内置的指令,除此之外vue还提供了非常方便的自定义指令,供我们对普通
- 【实验目的】:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识。【实验要求】:掌握利用Select语句进行各种查询操作:单表查
- 如下所示:# -*- coding: utf-8 -*-# @Time : 2018/1/17 16:37# @Author :
- 本文实例为大家分享了Virginia无密钥解密的具体代码,供大家参考,具体内容如下加密virginia加密是一种多表替换加密方法,通过这种方
- 所以特意写了这个配置文档,相信按照以下步骤你一定会成功的.错误的地方也希望各位指正. 本例是在wiondws XP下 php5.2.1(zi
- 按需导入:安装插件首先需要引入额外的插件:前**vite-plugin-components已重命名为unplugin-vue-compon
- PyQ5已经自动定义了很多QT自建的信号。但是在实际的使用中为了灵活使用信号与槽机制,可以根据需要自定义信号。通过使用pyqtSignal(
- 最近老师在讲 tkinter,所以我做了一个抽奖小游戏。一、效果图先上效果图。红色的小球会围绕蓝色小球做环形运动。我设置的四个角是奖品,其余
- 添加jar包 官网下载jar包idea导入jar包:检查官网下载jar包官网地址:MySQL :: Download Connec
- 在将数据库从MSSQL迁移到MySQL的过程中,基于业务逻辑的要求,需要在MySQL的自增列插入0值。在MSSQL中是这样完成的: stri
- 例子一:Python用WMI模块获取windowns系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位
- 本文实例讲述了python中enumerate函数用法。分享给大家供大家参考。具体分析如下:今日发现一个新函数 enumerate 。一般情
- llama Index是什么《零开始带你入门人工智能系列》第一篇:还用什么chatpdf,让llama Index 帮你训练pdf。Llam
- 本文实例讲述了Python格式化日期时间的方法。分享给大家供大家参考,具体如下:常用的时间函数如下获取当前日期:time.time()获取元
- Sun公司和Zmanda在3月18号声称他们正在一起合作,为MySQL Enterprise用户交付一种全面、全局数据备份与恢复解决方案。现
- 1.搭建环境:系统版本:Linux centos-linux.shared 3.10.0-123.el7.x86_64 #1 SMP Mon
- 这篇文章阐述的是一种函数式编程(functional-programming)设计模式,我称之为惰性函数定义(Lazy Function D
- 最近一个小项目需要一个星级评分的效果,所以去淘宝偷了一个,但是还得加载YUI很不爽,还是自己动手写一个吧~HTML: <!-
- PHPStudy hosts文件可能不存在或被阻止打开,同步hosts失败在使用PHPStudy建站包时,有时会遇到同步hosts失败的问题
- 一、两层结构的ASP应用有何缺点 在Browser/Server 应用程序开发领域,微软公司的IIS/ASP以其强大的功能,良好的扩展能力,