You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫:如何为相对URL添加前缀修复链接报错问题

解决Python爬虫中相对URL的问题

嘿,这个问题我之前爬站时也踩过坑!urllib.request.urlopen() 只认完整的绝对URL,你拿到的是相对路径,它根本不知道该向哪个域名发请求,所以才会抛出unknown url type的错误。

两种靠谱的解决思路:

1. 手动拼接基础URL

先确定目标网站的基础路径,你爬的站点根路径是https://saturn.etat.lu/tapes/,直接把这个前缀和相对路径拼在一起就行:

base_url = "https://saturn.etat.lu/tapes/"
# 比如你的相对路径是 'tapes_fr_nfo_lap.jsp?pdt=1838&lmz=0'
full_url = base_url + url

2. 用urllib.parse.urljoin自动拼接(更推荐)

这个方法更智能,能自动处理各种复杂的相对路径(比如带../的上级路径、根目录开头的/路径),不用自己手动拼接容易出错。

修改后的完整代码:

import urllib.request
from urllib.parse import urljoin  # 导入urljoin工具
from bs4 import BeautifulSoup
import re
import sqlite3

def make_soup(url):
    thepage = urllib.request.urlopen(url)
    soupdata = BeautifulSoup(thepage, "html.parser")
    return soupdata

# 定义站点基础URL
base_url = "https://saturn.etat.lu/tapes/"
soup = make_soup("https://saturn.etat.lu/tapes/tapes_fr_lst_pdt.jsp?sel=_")

allrecords = soup.findAll('tr')
recordsLength = len(allrecords)

for index in range(3, recordsLength):
    record = allrecords[index].find_all('a')
    agri = [record[1].get('href')]
    for url in agri:
        # 核心:把相对路径转为绝对URL
        full_url = urljoin(base_url, url)
        agripage = urllib.request.urlopen(full_url)
        soup1 = BeautifulSoup(agripage, "html.parser")
        # 这里可以继续处理soup1中的页面数据

为什么更推荐urljoin?

比如如果页面里的相对路径是../other/page.jsp,手动拼接会生成错误的地址,但urljoin会自动根据基础URL调整路径,生成正确的绝对地址,兼容性和容错性更强。

内容的提问来源于stack exchange,提问作者Gagan Deep Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:04