爬虫 beautifulSoup 方法
有的是tag.方法,有的是soup.方法。tag指的是一个标签,soup就是soup。
一、节点查找方法
用于从树形结构中定位目标标签或内容。
| 方法 | 功能描述 | 示例 |
|---|---|---|
soup.find(name, attrs, text, ...) | 查找第一个匹配的节点(标签 / 文本) | # 找第一个 <p> 标签p_tag = soup.find('p')# 找 class="title" 的 <h1>title = soup.find('h1', class_='title') |
soup.find_all(name, attrs, limit, ...) | 查找所有匹配的节点,返回列表 | # 找所有 <a> 标签all_links = soup.find_all('a')# 找所有 href 含 "example" 的 <a>links = soup.find_all('a', href=lambda x: 'example' in x) |
soup.select(css_selector) | 用CSS 选择器查找节点(更灵活) | # 找 class="content" 的 <div>div = soup.select('.content')[0]# 找 id="main" 下的所有 <p>paras = soup.select('#main p') |
二、节点遍历方法
用于在树形结构中遍历父子、兄弟节点。
| 方法 / 属性 | 功能描述 | 示例 |
|---|---|---|
tag.contents | 获取节点的直接子节点列表(包含文本节点) | # 打印 <div> 的所有直接子节点for child in div.contents:print(child) |
tag.children | 迭代器形式的直接子节点 | # 遍历 <ul> 的直接子节点(<li>)for li in ul_tag.children:print(li.text) |
tag.descendants | 迭代器形式的所有后代节点(递归遍历) | # 遍历 <body> 的所有后代节点for node in body.descendants:if node.name == 'a':print(node['href']) |
tag.parent | 获取节点的父节点 | # 获取 <a> 的父节点parent = a_tag.parent |
tag.next_sibling/tag.previous_sibling | 获取下一个 / 上一个兄弟节点(同级节点) | # 找 <p> 的下一个兄弟节点next_p = p_tag.next_sibling |
三、节点内容提取方法
用于从节点中提取文本、属性等信息。
| 方法 / 属性 | 功能描述 | 示例 |
|---|---|---|
tag.text / tag.get_text() | 提取节点的所有文本内容(含后代节点文本) | # 提取 <div> 内的所有文本text = div_tag.text# 提取时去除多余空格clean_text = div_tag.get_text(strip=True) |
tag['attr_name'] | 提取节点的属性值(如 href/src) | # 提取 <a> 的链接link = a_tag['href']# 提取 <img> 的图片地址img_url = img_tag['src'] |
tag.get(attr_name, default) | 提取属性(不存在时返回默认值) | # 提取 class,不存在则返回 "default"cls = div_tag.get('class', 'default') |
四、节点修改与操作方法
用于修改节点的标签、属性、文本等。
| 方法 | 功能描述 | 示例 |
|---|---|---|
tag.append(new_tag) | 向节点末尾添加子节点 | # 向 <div> 末尾添加 <p> 标签new_p = soup.new_tag('p', text='新增内容')div_tag.append(new_p) |
tag.insert(index, new_tag) | 在指定位置插入子节点 | # 在 <ul> 的第 2 个位置插入 <li>new_li = soup.new_tag('li', text='新列表项')ul_tag.insert(1, new_li) |
tag.replace_with(new_tag) | 用新节点替换原节点 | # 用 <strong> 替换 <em>new_strong = soup.new_tag('strong', text='重要')em_tag.replace_with(new_strong) |
del tag['attr'] | 删除节点的属性 | # 删除 <a> 的 href 属性del a_tag['href'] |
tag.string = new_text | 修改节点的文本内容 | # 修改 <p> 的文本p_tag.string = '修改后的文本' |
五、其他实用方法
| 方法 | 功能描述 | 示例 |
|---|---|---|
soup.prettify() | 格式化 HTML 代码(便于查看) | print(soup.prettify()) |
tag.name | 获取节点的标签名(如 'div'/'a') | print(p_tag.name) # 输出 'p' |
tag.has_attr(attr) | 判断节点是否包含某属性 | if a_tag.has_attr('href'):print("包含 href 属性") |
这些方法覆盖了从 “查找节点” 到 “修改结构” 的全流程,结合实际需求灵活组合即可高效处理 HTML 解析任务。
