爬虫 学习笔记2 BeautifulSoup及应用

本文介绍了BeautifulSoup库在解析HTML文档中的四种主要对象:Tag、NavigableString、BeautifulSoup和Comment,并展示了如何遍历和搜索文档内容。同时,讲解了CSS选择器的使用,如通过标签、类名、ID和属性来定位文档元素。内容涵盖了网页抓取和解析的基础操作。

一、BeautifulSoup

BeautifulSoup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所以对象可以归纳为4种:

  1. Tag
  2. NavigableString
  3. BeatifulSoup
  4. Comment
#导入所需的模块
import requests
from bs4 import BeautifulSoup


file = open("./baidu.html","rb")         #打开文档
html = file.read().decode("utf-8")       #读取文档
bs = BeautifulSoup(html,"html.parser")   #html.parser解析器解析html文档

1. Tag

标签及其内容:拿到它所找到的第一个内容

print(bs.title)     #输出:<title>百度一下,你就知道 </title>

print(bs.a)

print(bs.head)

#print(type(bs.head))      #输出:<class 'bs4.element.Tag'>

输出:
在这里插入图片描述

有标签就有属性

print(bs.title.string)    #百度一下,你就知道
#print(type(bs.title.string))   #<class 'bs4.element.NavigableString'>

输出:
在这里插入图片描述

2. NavigableString

标签里的内容(字符串)

print(bs.a.attrs)        #标签里所有的属性值(字典形式)

print(bs.a.string)       #输出字符串

print(type(bs))          #<class 'bs4.BeautifulSoup'>

输出:
在这里插入图片描述

3. #3.BeautifulSoup

表示整个文档 (想要进行xx内容的访问,可以直接使用这个)

print(bs.name)     #输出:[document]

print(bs.attrs)    #输出:{}

print(bs)          #整个文档(树形结构,没有嵌套)

print(bs.a.string)    #输出:新闻

print(type(bs.a.string))    #输出:<class 'bs4.element.Comment'>

4.Comment

是一个特殊的NavigableString 输出端内容不包含注释符号

二、应用

1.文档的遍历

print(bs.head.contents)     #Tag的.content属性  获取Tag的子节点以列表形式返回
print(bs.head.contents[1])   #用列表索引获取其某个元素

输出:
在这里插入图片描述
在这里插入图片描述

  • 更多内容,搜索文档

2.文档的搜索

(1)find_all()

  • 方法一:
    字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("a")
  • 方法二:( 最常用)
    正则表达式搜索:使用search()方法来匹配内容
import re
t_list = bs.find_all(re.compile("a"))  
  • 方法三: (了解)
    传入一个函数(方法),根据函数的要求来搜索
def name_is_exists(tag):
    return tag.has_attr("name")

t_list = bs.find_all(name_is_exists)


for item in t_list:
    print(item)

print(t_list)

在这里插入图片描述

(2)kwarg 参数

t_list = bs.find_all(id="head")  #参数   (包括子内容

for item in t_list:
    print(item)

输出:
在这里插入图片描述

#t_list = bs.find_all(class_=True)
t_list = bs.find_all(href="http://news.baidu.com")
for item in t_list:
    print(item)

输出:
在这里插入图片描述

(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)    #先定个数

for item in t_list:
    print(item)

输出:
在这里插入图片描述

三、css选择器

t_list = bs.select('title')     #通过标签来查找
#输出:百度一下,你就知道 

t_list = bs.select(".mnav")    #通过类名来查找

t_list = bs.select("#u1")       #通过ID来查找

t_list = bs.select("a[class='bri']")   #通过属性来查找

t_list = bs.select("head > title")   #通过子标签来查找


t_list = bs.select(".mnav ~ .bri")    #通过兄弟标签来查找

print(t_list[0].get_text())    #获取文本

for item in t_list:
    print(item)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值