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

如何在网页爬虫中对页面重复URL仅记录一次?

解决爬虫页面URL去重问题:同一URL仅记录一次

要实现爬虫爬取页面时,同一URL即使多次出现也只记录一次,最简洁高效的方式是利用Python的**集合(set)**特性——集合会自动过滤重复元素。以下是具体实现方案:

核心思路

  1. 爬取目标页面并解析HTML结构。
  2. 提取页面中所有目标URL。
  3. 将提取到的URL存入集合,集合会自动忽略重复项。
  4. 后续可将集合转为列表或直接处理集合内的唯一URL。

代码示例(基于requests + BeautifulSoup)

import requests
from bs4 import BeautifulSoup

# 目标页面URL
target_page = "https://www.ig.com/uk/news-and-trade-ideas/"
# 请求头模拟浏览器,避免被反爬拦截
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(target_page, headers=headers)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, "html.parser")

# 初始化集合存储去重后的URL
unique_article_urls = set()

# 提取所有文章URL(需根据页面实际HTML结构调整选择器)
# 示例:假设文章链接的a标签href包含"/news/"路径
for link in soup.select("a[href*='/news/']"):
    raw_url = link.get("href")
    # 处理相对URL,转换为绝对URL
    if raw_url.startswith("/"):
        full_url = f"https://www.ig.com{raw_url}"
    else:
        full_url = raw_url
    # 添加到集合,自动去重
    unique_article_urls.add(full_url)

# 输出结果
print(f"去重后共获取 {len(unique_article_urls)} 个唯一文章URL:")
for url in unique_article_urls:
    print(url)

关键说明

  • 选择器调整:代码中的soup.select("a[href*='/news/']")是示例选择器,你需要根据目标页面的实际HTML结构修改(比如检查文章链接的a标签是否有特定class,如class="article-link",则选择器改为soup.select("a.article-link"))。
  • 效率对比:集合去重的时间复杂度远低于列表判断(if url not in list),当页面URL数量较多时,集合的优势更明显。
  • 有序需求:如果需要保持URL的提取顺序,可以改用dict.fromkeys()方法(Python 3.7+字典保持插入顺序):
    # 有序去重
    ordered_unique_urls = list(dict.fromkeys(extracted_url_list))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:05:29