Python+BeautifulSoup如何从href属性获取完整的绝对链接?
问题解答
可以通过BeautifulSoup配合Python内置工具实现完整链接的提取,不需要手动拼接URL,也不会出现你提到的路径拼接错误问题。
核心原理
你之前的拼接逻辑出错,是因为没有区分两类相对路径的规则:
- 以
/开头的路径为站点根相对路径,需要拼接在站点域名之后 - 不以
/开头的路径为当前页面路径相对路径,需要拼接在当前页面的上级路径之后
手动判断两类路径的成本很高,Python标准库urllib.parse中的urljoin方法已经实现了和浏览器完全一致的路径拼接逻辑,最终生成的结果和鼠标悬停显示的完整链接完全相同。
实现代码示例
依赖导入
from bs4 import BeautifulSoup import requests from urllib.parse import urljoin
核心提取逻辑
# 替换为当前访问的完整页面URL,必须带http/https协议前缀 current_page_url = "https://columbiabasinhospital.org/patients-visitors/advance-directives/" # 请求当前页面 response = requests.get(current_page_url) soup = BeautifulSoup(response.text, "html.parser") # 遍历所有带href属性的a标签 for a_tag in soup.find_all("a", href=True): # 自动生成正确的绝对链接 full_url = urljoin(current_page_url, a_tag["href"]) # 后续可对full_url进行爬取逻辑处理 print(full_url)
注意事项
- 传入
urljoin的当前页面URL必须携带完整的http://或https://协议头,否则会导致拼接结果异常 - 该方法会自动识别href为完整外链、根相对路径、当前路径相对路径的三类情况,无需额外做判断处理
内容的提问来源于stack exchange,提问作者Ji Kang
相关产品推荐
相关产品推荐

