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

Web Scraping技术求助:无法将抓取的Href与Stub拼接至full_url数组

解决URL拼接失败的问题

我帮你梳理下代码里的问题,这几个地方改了应该就能正常拼接URL了:

代码里的核心错误点

  • 循环里的语法错误:full_url.item.find('a').get('href') 这行写法不对,应该直接用item.find('a').get('href')来获取a标签的href属性,还要把它存成变量方便后续使用。
  • urljoin的参数用错了:你写的是urljoin('stub', 'event_url'),这两个都是字符串字面量,应该用实际定义的stub变量和刚获取到的href值。
  • 缺少headers定义:requests.get(url, headers=headers)里的headers没初始化,请求可能会被网站拦截,得补个基础的headers。
  • 可能find_all(id='ctl5')返回的是单个元素?如果页面里id为ctl5的元素只有一个,用find(id='ctl5')更合适,避免循环处理单个元素的尴尬。

修正后的完整代码

import pandas as pd
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 补全headers,模拟浏览器请求
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

url = 'http://www.owgr.com/events?pageNo=1&pageSize=400&tour=Eur&year=2019'
stub = 'http://www.owgr.com'
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')

full_url = []
# 如果ctl5是单个元素,用find代替find_all
full_url_elem = soup.find(id='ctl5')
# 先判断元素是否存在,避免报错
if full_url_elem:
    # 找到该元素下所有的a标签(如果是多个的话)
    a_tags = full_url_elem.find_all('a')
    for a in a_tags:
        href = a.get('href')
        # 检查href是否存在,再拼接
        if href:
            complete_url = urljoin(stub, href)
            full_url.append(complete_url)

# 打印结果看看
print(full_url)

额外说明

  • urljoin会自动处理相对路径和绝对路径:如果href已经是完整URL,它会直接返回;如果是相对路径,会自动和stub拼接成完整URL,比手动拼接更靠谱。
  • 加了元素存在性检查,避免因为页面结构变化找不到元素导致代码崩溃。

内容的提问来源于stack exchange,提问作者rug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:59:41