BeautifulSoup技术问题:如何获取标题对应的精准链接URL
获取标题与对应精准链接的解决方案
我来帮你搞定这个问题!你当前的代码只抓取了<h2>标签本身,但实际上文章的链接通常是嵌套在<h2>内部的<a>标签里的。咱们只需要调整一下逻辑,从每个h2里提取对应的a标签信息就行,还得注意处理相对链接的问题,确保拿到的是完整可访问的URL。
修改后的代码
from bs4 import BeautifulSoup import requests from requests.compat import urljoin # 用来拼接相对链接和域名 # 请求页面 url = "http://www.prothom-alo.com/" response = requests.get(url) response.raise_for_status() # 确保请求成功,避免后续解析出错 soup = BeautifulSoup(response.text, "lxml") # 遍历所有h2标签 for h2_tag in soup.find_all("h2"): # 找到h2内部的a标签 link_tag = h2_tag.find("a") if link_tag: # 获取标题文本(strip()去掉多余的空格换行) title = link_tag.get_text(strip=True) # 获取链接,用urljoin拼接成完整URL(处理相对路径) full_link = urljoin(url, link_tag.get("href")) # 输出标题+链接的组合 print(f"标题: {title}") print(f"链接: {full_link}") print("---") # 分隔线,方便阅读
关键说明
- 提取a标签:通过
h2_tag.find("a")定位h2内部的链接元素,这是获取标题和链接的核心。 - 处理相对链接:有些网站的
href是相对路径(比如/latest/12345),直接使用会无法访问,urljoin会自动把它和网站域名拼接成完整的URL。 - 异常处理:加了
if link_tag:的判断,避免遇到没有嵌套a标签的h2时抛出错误。 - 文本清理:
get_text(strip=True)会把标题里的多余空格、换行符去掉,让输出更整洁。
如果需要把结果保存成结构化数据(比如列表或字典),可以调整代码如下:
results = [] for h2_tag in soup.find_all("h2"): link_tag = h2_tag.find("a") if link_tag: results.append({ "title": link_tag.get_text(strip=True), "link": urljoin(url, link_tag.get("href")) }) # 打印所有结构化结果 for item in results: print(item)
内容的提问来源于stack exchange,提问作者Asaduzzaman Sohel
相关产品推荐
相关产品推荐

