Python网络爬虫与信息提取(二) BeautifulSoup库

本文介绍了Python的BeautifulSoup库,包括库的入门、解析器选择和基本元素。详细讲解了如何获取tag标签以及利用bs4库进行html内容的遍历,如上行、下行和平行遍历。还提到了常用的信息提取方法,如.find_all()及其扩展方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BeautifulSoup 库入门

BeautifulSoup库主要作用是能对html xml格式进行解析,并且提供解析

import requests
from bs4 import BeautifulSoup as bs
r = requests.get ("https://www.python123.io/ws/demo.html")
r.text
demo =r.text
soup = bs(demo,"html.parser") # 解释器
print(soup)
print(soup.prettify()) # 增加换行符,分行显示,更加直观美观


BeautifulSoup 库解析器
解析器使用方法条件
bs4的html解析器BeautifulSoup(mk,”html.parser”)安装bs4库
lxml的html解析器BeautifulSoup(mk,”lxml”)pip install lxml
lxml的xml解析器BeautifulSoup(mk,”xml”)pip install lxml
html5lib的解析器BeautifulSoup(mk,”html5lib”)pip install html5lib


BeautifulSoup 的基本元素
基本元素说明
Tag标签,最基本的信息组织单元
Name标签的名字,格式:.name
Attributes标签的属性,字典形式组织,格式:.attrs
NavigableString标签内非属性字符串,格式 .string
Comment注释


获得tag标签
soup.title #获取title标签
tag = soup.a  # a标签定义超链接
""" 如果多个标签,只返回第一个"""
""" 标签名字"""
soup.a.name # "a"
soup.a.parent.name # "p"
soup.p.parent.name # "body"
""" 标签属性"""
tag.attrs # 字典形式
tag.attrs["class"] # 提取字典信息 
tag.attrs["href"]#
""" 标签内字符串 """
soup.p.string 
soup.a.string 


基于bs4库的html内容遍历方法

上行遍历,下行遍历,平行遍历

遍历属性说明
.contents子节点的的列表,将所有儿子节点存入列表
.children子节点的迭代类型,与.content类似,用于循环遍历儿子节点
.descendants子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
.parent节点的父亲标签
.parents节点的父辈标签,包含父亲,爷爷及以上
.next_sibling返回按照html文本顺序的下一个平行节点标签
.previous_sibling返回按照html文本顺序的上一个平行节点标签
.next_siblings迭代类型,返回按照html文本顺序的后续所有平行节点标签
.previous_siblings返回按照html文本顺序的前序平行节点标签


soup.head
soup.head.contents #返回的是列表
soup.body.contents # 可以用len()函数检索数量,可以用for...in...的方式遍历列表
soup.a.parent
soup.a.next_sibling
soup.a.next_sibling.next_sibling 

上行遍历标准代码

soup = bs(demo,"html.parser")
for parent in soup.a.parents:
    if parent is None:
        print (parent)
    else:
        print(parent.name)



信息提取一般方法:

""" 提取demo页面中的url链接"""
for link in soup.find_all("a"): # .find_all(name, attrs,recursive = True,string)
    print (link.get("href"))



.find_all()方法介绍

""" 用于查找信息,返回列表类型"""
""" name 用于对标签名称的检索字符串"""
soup.find_all('a')
soup.find_all(['a','b']) # 注意是列表形式
soup.find_all (True) #所有标签 
import re # 引入正则表达式
for tag in soup.find_all(re.compile('b')):
    print ('tag.name')
""" attrs对标签属性值的检索字符串"""
soup.find_all('p','course') #返回含有course值得p标签
soup.find_all (id = 'link1')
soup.find_all (string = 'Basic Python')
soup.find_all (string = re.compile('python')) #所有含有python的字符串

'''最后因为find_all函数经常被使用,所以可以不用输入,比如soup.find_all(...) 可以写成soup.(...) ''' 

扩展方法:.find() .find_parent .find_parents .find_next_siblings .find_next_sibling .find_previous_siblings .find_previous_sibling

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值