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

如何批量提取目标网页中存储的所有链接?

如何批量提取目标网页中存储的所有链接?

嘿,看你已经尝试了手动翻页面找链接,还用了BeautifulSoup,但没成功一次性把那100个左右的链接都提取出来对吧?我来帮你调整下代码,解决这个问题~

首先说下你之前代码的小问题:你是把整个<a>标签的HTML代码存进列表了,而不是提取里面真正的链接地址(也就是href属性的值),而且还没过滤掉那些没用的锚点链接(比如#开头的)。先给你修正后的BeautifulSoup版本代码,专门提取有效链接:

import requests
from bs4 import BeautifulSoup

# 目标网页地址
url = 'https://www.wohnungsbaugenossenschaften.de/gaestewohnung-finden/teilnehmende-genossenschaften'
# 发送HTTP请求获取页面内容
response = requests.get(url)

# 先检查请求是否成功
if response.status_code == 200:
    # 解析页面内容
    soup = BeautifulSoup(response.text, 'lxml')
    # 用来存储有效链接的列表
    valid_links = []
    
    # 只遍历带有href属性的a标签,避免空标签
    for a_tag in soup.find_all('a', href=True):
        link = a_tag['href']
        # 过滤掉锚点链接和空链接
        if not link.startswith('#') and link.strip() != '':
            # 把相对链接转换成完整的绝对链接
            if not link.startswith('http'):
                link = requests.compat.urljoin(url, link)
            valid_links.append(link)
    
    # 输出结果
    print(f"一共提取到{len(valid_links)}个有效链接")
    for idx, link in enumerate(valid_links, 1):
        print(f"{idx}. {link}")
else:
    print(f"请求网页失败啦,状态码:{response.status_code}")

这段代码做了这些优化:

  • 用href=True筛选出真正带链接的a标签,跳过那些没有实际跳转地址的标签
  • 自动过滤掉#开头的锚点链接,这些不是你要的页面链接
  • 把相对路径的链接转换成完整的绝对链接,这样复制出来就能直接访问
  • 加了请求状态码判断,方便排查请求失败的情况

如果运行上面的代码还是没拿到那100个左右的链接,那大概率这些链接是动态加载的——也就是页面初始加载时没有,是通过JavaScript后续异步加载出来的。这时候requests就抓不到了,得用能模拟浏览器渲染的工具,比如Selenium。给你个示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

url = 'https://www.wohnungsbaugenossenschaften.de/gaestewohnung-finden/teilnehmende-genossenschaften'
# 初始化Chrome浏览器(需要提前下载对应版本的chromedriver哦)
driver = webdriver.Chrome()
driver.get(url)

# 等3秒让页面的动态内容加载完成(也可以用更精准的等待方式,比如等某个元素出现)
time.sleep(3)

valid_links = []
# 找到页面所有a标签
a_tags = driver.find_elements(By.TAG_NAME, 'a')
for a_tag in a_tags:
    link = a_tag.get_attribute('href')
    # 过滤无效链接
    if link and not link.startswith('#') and link.strip() != '':
        valid_links.append(link)

# 输出结果
print(f"一共提取到{len(valid_links)}个有效链接")
for idx, link in enumerate(valid_links, 1):
    print(f"{idx}. {link}")

# 记得关闭浏览器
driver.quit()

Selenium会像真实用户一样打开浏览器,等页面的JavaScript加载完所有内容后再提取链接,这样就能抓到那些动态生成的链接了。不过要注意提前下载对应浏览器的驱动(比如Chrome的chromedriver),并配置好环境哦。

备注:内容来源于stack exchange,提问作者zero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:12:58