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

如何通过类名定位<ul>并提取其<li>内链接?(代码返回空列表)

解决无法定位目标
    标签及提取链接的方案

可能的原因及对应解决方法

1. 类名选择器使用错误

BeautifulSoup处理多类名的<ul>标签时,不能直接将所有类名拼接成一个字符串传入find_all,因为HTML的class属性是空格分隔的多类集合,需要精准匹配。推荐两种正确写法:

from bs4 import BeautifulSoup
import requests

url = "你的目标网页URL"
# 务必添加User-Agent,避免被网站拦截
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 方法1:通过class_参数传入类名列表
target_ul = soup.find_all("ul", class_=["hover", "p-0", "job-search-key-kgm6qi", "exy0tjh1"])

# 方法2:使用CSS选择器(更简洁直观)
target_ul = soup.select("ul.hover.p-0.job-search-key-kgm6qi.exy0tjh1")

2. 页面内容动态加载

如果目标<ul>是通过JavaScript动态渲染生成的,requests只能获取到初始静态HTML,无法拿到动态加载的内容。这时需要用浏览器自动化工具模拟页面加载:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = "你的目标网页URL"
# 初始化Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver = webdriver.Chrome()
driver.get(url)

# 等待目标元素加载完成,超时时间10秒
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "ul.hover.p-0.job-search-key-kgm6qi.exy0tjh1"))
    )
finally:
    page_source = driver.page_source
    driver.quit()

soup = BeautifulSoup(page_source, "html.parser")
target_ul = soup.select("ul.hover.p-0.job-search-key-kgm6qi.exy0tjh1")

3. 请求头缺失触发反爬

部分网站会校验请求头中的User-Agent、Referer等字段,缺失时会返回不完整页面或空内容。确保请求头包含必要字段,示例见第一个代码块。

提取目标链接

定位到目标<ul>后,遍历其子<li>标签提取链接:

if target_ul:
    # 取第一个匹配的<ul>(如有多个可根据需求调整索引)
    target_list = target_ul[0]
    links = []
    for li in target_list.find_all("li"):
        a_tag = li.find("a")
        if a_tag and a_tag.get("href"):
            # 将相对链接转为绝对链接
            full_link = requests.compat.urljoin(url, a_tag.get("href"))
            links.append(full_link)
    print("提取到的链接:", links)
else:
    print("未找到目标<ul>标签")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:57:17