补充beautifulSoup

这篇博客介绍了Python爬虫的基础知识,包括BeautifulSoup库的使用,如解析HTML、查找和遍历元素。还讲解了如何利用find_all()方法进行内容筛选,通过kwargs参数指定搜索条件,如id、class_等。此外,还提到了CSS选择器的应用,如通过标签、类名和ID选取元素。最后,展示了如何使用正则表达式查找特定文本。
摘要由CSDN通过智能技术生成

学习视频链接:Python爬虫基础5天速成

前期准备

后面所有代码都需要的前期准备(那个./baidu1.html是我自个儿搜的,应该和教程里不太一样导致后期很多内容输出都不同所以就不贴出来了)

from bs4 import BeautifulSoup

file = open("./baidu1.html", "rb")
html = file.read().decode("utf-8")
bs = BeautifulSoup(html, "html.parser")
#解析一个html文档,用html.parser的方式

简要测试

这部分是为了简要测试一下本html的数据

print(bs.title)
print(bs.a)
print(bs.head)
print(type(bs.head))

用标签来查找数据

#1.Tag 标签及其内容:拿到它所找到的第一个内容
print(bs.title.string)
print(type(bs.title.string))

#2.NAvigatableString 标签里的内容(标签里的字符串)
print(bs.a.attrs)
print(type(bs))#表示整个文档

#3.BeautifulSoup表示整个文档
print(bs.name)
print(bs.attrs)
print(bs)

#4.Comment特殊的NavigableString输出的内容会不包含注释符号

文档的遍历:

print(bs.head.contents)
print(bs.head.contents[1])

诸如此类还有很多:

.contents获取Tag的所有子节点,返回一个list
.children获取Tag的所有子节点,返回一个生成器
.descendants获取Tag所有的子孙节点
.strings如果Tag包含多个字符,即在子孙节点中有内容,可以用此获取而后进行遍历
.stripped_strings与strings用法一致,只不过可以去除掉那些多余的空白内容
.parent获取tag的父节点

文档的搜索:

插播一下

#觉得打印烦:
for item in t_list:
    print(item)

(1)find_all()

#字符串过滤:会查找与字符串完全匹配的内容
t_list - bs.find_all("a")#查找所有的a放入一个列表中
#正则表达式搜索:使用search()方法来匹配内容
import re
t_list = bs.find_all(re.compile("a"))#find_all包含“a”字符的标签,仍匹配某一个标签及其内容
#方法搜索: 传入一个函数(方法),根据函数的要求来搜索(了解)
def name_is_exists(tag):
    return tag.has_attr("name")#返回这个标签里面有name的 de 具体的值
t_list = bs.find_all(name_is_exists)

(2)kwargs 参数

t_list = bs.find_all(id = "head")
t_list = bs.find_all(class_ = True)#通过给class信息
t_list = bs.find_all(href="http://news.baidu.com")#通过给href找

(3)text参数

t_list = bs.find_all(text = "hao123")#查找所有该类型文本
t_list - bs.find_all(text = ["hao123", "地图", "贴吧"])
t_list = bs.find_all(text = re.compile("\d"))#查找所有带数字的文本
#应用正则表达式查找包含特定文本的内容(标签里的字符串)

(4)limit 参数

t_list = bs.find_all("a", limit = 3)#表示只获取limit个数据

css选择器

t_list = bs.select('title')#通过标签来查找
t_list = bs.select('.mnav')#通过类名来查找,注意要自己加上"."
t_list = bs.select("#u1")#通过id来查找(<div id = "u1">中可以看id)
t_list = bs.select("a[class='bri']")#通过属性来查找
t_list = bs.select("head > title")#通过子标签来查找 一层一层往下找(head里面的title)                  
t_list = bs.select(".mnav ~ .bri")#找兄弟标签,即在mnav所属标签中的bri标签
print(t_list[0].get_text())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值