Python BeautifulSoup爬虫技巧总结
- 安装及引用
首先需要安装 BeautifulSoup 库,可以使用 pip install beautifulsoup4 命令来安装。安装完成后引用库:
from bs4 import BeautifulSoup
- 解析 HTML
使用 BeautifulSoup 清洗 HTML,创建 BeautifulSoup 对象:
html_doc = """ <html> <head> <title>pidancode.com</title> </head> <body> <div id="intro"> <h2 class="title">Welcome to pidancode.com</h2> <p class="description">This is a website for coding lovers.</p> </div> <div id="content"> <h3 class="sub-title">Latest Posts</h3> <ul class="post-list"> <li class="post-item">Post 1</li> <li class="post-item">Post 2</li> <li class="post-item">Post 3</li> </ul> </div> </body> </html> """ soup = BeautifulSoup(html_doc, 'html.parser')
这里我们传入两个参数,第一个是 HTML 文档,第二个是解析器,这里我们使用默认的 html.parser。
- 查找标签
使用 soup.标签名
可以查找到页面中的所有 标签名
对应的标签,返回的是一个列表:
print(soup.title) # <title>pidancode.com</title> print(soup.h2) # <h2 class="title">Welcome to pidancode.com</h2> print(soup.ul) # <ul class="post-list">...</ul>
如果我们只想得到标签内的文字,可以使用 .string
属性:
print(soup.title.string) # pidancode.com print(soup.h2.string) # Welcome to pidancode.com
- 根据属性查找标签
使用 soup.find_all()
可以通过标签名和属性值查找标签,该函数返回的是一个列表。
例如,我们想查找页面中所有 class 属性值为 title 的标签:
title_tags = soup.find_all(class_='title') for title in title_tags: print(title.string)
输出:
Welcome to pidancode.com
另外,也可以使用 soup.select()
方法,该方法可以支持 CSS 选择器语法,也可以根据属性值获取标签,例如:
desc_tags = soup.select('#intro .description') for desc in desc_tags: print(desc.string)
输出:
This is a website for coding lovers.
- 遍历文档树
使用 soup.children
和 soup.descendants
属性可以遍历文档树。
soup.children
返回的是一个迭代器,包含了当前标签的直接子节点。
soup.descendants
返回的是一个迭代器,包含了当前标签的所有后代节点。
例如,我们想遍历 ul 标签的所有子节点:
ul_tag = soup.find('ul', class_='post-list') for child in ul_tag.children: print(child)
输出:
<li class="post-item">Post 1</li> <li class="post-item">Post 2</li> <li class="post-item">Post 3</li>
- 修改标签属性
使用 tag['属性名']
可以修改标签的属性值。
例如,我们想将 id 为 intro 的 div 标签的 class 属性值改为 intro-text:
intro_tag = soup.find(id='intro') intro_tag['class'] = 'intro-text' print(intro_tag)
输出:
<div class="intro-text" id="intro"> <h2 class="title">Welcome to pidancode.com</h2> <p class="description">This is a website for coding lovers.</p> </div>
- 创建新标签
使用 BeautifulSoup 可以创建新标签。
例如,我们想创建一个新的 a 标签,指向 pidancode.com:
new_a_tag = soup.new_tag('a') new_a_tag['href'] = 'http://pidancode.com' new_a_tag.string = 'pidancode.com' print(new_a_tag)
输出:
<a href="http://pidancode.com">pidancode.com</a>
- 添加标签
使用标签元素的 append()
和 insert()
方法可以向一个标签中添加子标签。
例如,我们想在 id 为 intro 的 div 标签中添加新建的 a 标签:
intro_tag.append(new_a_tag) print(intro_tag)
输出:
<div class="intro-text" id="intro"> <h2 class="title">Welcome to pidancode.com</h2> <p class="description">This is a website for coding lovers.</p> <a href="http://pidancode.com">pidancode.com</a> </div>
- 获取标签的文本内容
使用 tag.get_text()
方法可以获取标签的文本内容。
例如,我们想获取 id 为 intro 的 div 标签下所有标签的文本:
print(intro_tag.get_text())
输出:
Welcome to pidancode.com This is a website for coding lovers. pidancode.com
- 去除空格和换行符
使用 tag.get_text(strip=True)
可以去除标签的空格和换行符。
例如,我们想去除前面获取的文本中的空格和换行符:
print(intro_tag.get_text(strip=True))
输出:
Welcome to pidancode.comThis is a website for coding lovers.pidancode.com
总结
本篇文章中,我们介绍了使用 BeautifulSoup 进行爬虫的一些基本技巧,包括:解析 HTML、查找标签、根据属性查找标签、遍历文档树、修改标签属性、创建新标签、添加标签、获取标签的文本内容、去除空格和换行符。掌握了这些技巧,我们就能更快、更准确地获取需要的信息。
相关文章