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

新手程序员求助:用BeautifulSoup和requests爬取dns-shop.ru全站URL失败

解决DNS-shop网站URL爬取失败的问题

你的代码无法正常工作,核心原因在于网站基础反爬机制拦截了无标识的爬虫请求,以及直接输出的href多为相对路径,无法直接使用。以下是修复后的代码和关键说明:

修复后的代码

from bs4 import BeautifulSoup
import requests
from urllib.parse import urljoin

# 目标网站基础URL
base_url = "https://www.dns-shop.ru/catalog/"

# 设置请求头,模拟普通浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 发送请求并验证状态
response = requests.get(base_url, headers=headers)
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code}")
else:
    soup = BeautifulSoup(response.text, 'lxml')
    # 遍历有效a标签,处理链接
    for link in soup.find_all('a', href=True):  # 仅筛选带href属性的标签
        href = link['href']
        # 跳过无效链接
        if href.startswith('javascript:') or href == '#':
            continue
        # 将相对路径转换为完整可访问URL
        full_url = urljoin(base_url, href)
        print(full_url)

关键修复点

  • 添加请求头:无User-Agent的请求会被网站识别为爬虫,返回空白页面或拒绝访问,设置浏览器标识可绕过基础反爬。
  • 验证请求状态:通过response.status_code快速确认请求是否成功,方便排查网络或权限问题。
  • 过滤无效链接:跳过javascript:开头的脚本链接和锚点#链接,避免输出无用内容。
  • 拼接完整URL:用urljoin将页面内的相对路径转换为完整可访问的URL,解决原代码输出路径无法直接访问的问题。

如果运行后仍无法获取全部链接,大概率是网站采用了JavaScript动态渲染内容,这时需要用selenium或playwright等工具模拟浏览器加载,但对新手来说,先掌握上述基础修复就能解决当前问题。

内容的提问来源于stack exchange,提问作者Илья

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:42:40