`beautifulsoup4`(简称 BeautifulSoup)是 Python 中最常用、最强大的 HTML 和 XML 解析库之一

📅 2026/7/14 5:06:30
`beautifulsoup4`(简称 BeautifulSoup)是 Python 中最常用、最强大的 HTML 和 XML 解析库之一
beautifulsoup4简称 BeautifulSoup是 Python 中最常用、最强大的 HTML 和 XML 解析库之一专为从网页中提取结构化数据而设计。它不直接发起网络请求通常与requests库配合使用requests获取网页源码BeautifulSoup解析并导航 DOM 树。✅ 基本用法示例importrequestsfrombs4importBeautifulSoup urlhttps://example.comresponserequests.get(url)response.raise_for_status()# 检查请求是否成功soupBeautifulSoup(response.text,html.parser)# 推荐使用 html.parser内置无需额外安装# 提取标题titlesoup.title.stringifsoup.titleelseNone# 查找所有链接links[a.get(href)forainsoup.find_all(a,hrefTrue)]# 使用 CSS 选择器更简洁headingssoup.select(h1, h2, h3)# 查找带特定 class 的 divcontentsoup.find(div,class_main-content)⚠️ 注意事项解析器选择html.parser轻量、稳定、lxml更快更容错需pip install lxml、html5lib最接近浏览器解析需pip install html5lib。中文乱码问题若网页编码非 UTF-8需显式指定response.contentsoup BeautifulSoup(response.content, html.parser, from_encodinggbk)或使用response.encoding自动识别。动态渲染内容如 JS 生成的 DOM无法被 BeautifulSoup 直接解析需配合Selenium或Playwright。✅ 安装命令pipinstallbeautifulsoup4 requests使用 BeautifulSoup 提取网页中所有图片的src属性并去重可按以下步骤实现✅ 正确做法含健壮性处理importrequestsfrombs4importBeautifulSoupdefextract_unique_img_srcs(url):try:responserequests.get(url,timeout10)response.raise_for_status()response.encodingresponse.apparent_encoding# 自动识别编码避免乱码soupBeautifulSoup(response.text,html.parser)# 查找所有 img 标签并提取 src 属性过滤空值和无效值srcs[]forimginsoup.find_all(img,srcTrue):# 只匹配有 src 属性的 img 标签srcimg.get(src,).strip()ifsrcandnotsrc.startswith(data:):# 可选跳过 base64 内联图片# 处理相对 URL转换为绝对 URLfromurllib.parseimporturljoin absolute_srcurljoin(url,src)srcs.append(absolute_src)# 去重保持出现顺序→ 使用 dict.fromkeys() 是 Python 3.7 保持插入顺序的最简方式unique_srcslist(dict.fromkeys(srcs))returnunique_srcsexceptExceptionase:print(f解析失败{e})return[]# 示例调用urlsextract_unique_img_srcs(https://example.com)print(f共提取{len(urls)}个唯一图片链接)fori,srcinenumerate(urls[:5],1):# 打印前5个示例print(f{i}.{src}) 补充说明img.get(src, )比直接访问img[src]更安全避免 KeyErrorurljoin(url, src)自动处理相对路径如/images/logo.png或../assets/icon.jpg生成完整 URL过滤data:开头的 base64 图片可根据需求保留或剔除若需进一步去重忽略查询参数差异如?v1.2可用urllib.parse.urlparse标准化后再去重。