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

Python网络爬虫如何实现搜索词列表修改扩展及去重处理

问题修复方案

核心问题说明

  • 变量作用域问题:你在search函数内部定义了searches、new_searches、new_urls,每次递归调用函数都会重新初始化这三个局部变量,自然不会保留上一次的结果
  • 过滤逻辑错误:你写的过滤代码是从空的new_searches里筛选值,结果必然为空,正确逻辑应该是将当前页新抓取的关键词先做非空判断,再和全局去重列表比对筛选新增值

修复后可运行代码

from selenium import webdriver

# 初始化浏览器驱动,可替换为你自己的驱动初始化逻辑
driver = webdriver.Chrome()

# 存储列表提到全局作用域,避免每次函数调用被重置
all_searches = []  # 保留所有元素(含重复)的列表,对应你需求里的searches
unique_searches = []  # 去重后的最终列表,对应你需求里的new_searches
url_queue = [] # 待爬取的url队列,避免重复爬取同一页面

def search(url):
    driver.get(url)
    current_page_terms = []
    current_page_urls = []
     
    try:
        # 获取当前页的建议词
        suggestions = driver.find_element_by_xpath('//*[@id="search-associates"]').find_elements_by_tag_name('a')
        for i in suggestions:
            term = i.text.strip()
            # 提前过滤空值
            if not term:
                continue
            current_page_terms.append(term)
            current_page_urls.append(i.get_attribute('href'))
    except Exception as e:
        print(f"获取当前页建议词失败:{e}")
        return

    # 1. 追加到全量列表,保留重复符合你的需求
    all_searches.extend(current_page_terms)

    # 2. 筛选新增不重复的词,追加到去重列表
    new_terms = [x for x in current_page_terms if x not in unique_searches]
    unique_searches.extend(new_terms)

    # 3. 新增url加入待爬队列,去重避免重复爬取
    for u in current_page_urls:
        if u not in url_queue:
            url_queue.append(u)

    # 测试逻辑:仅爬取队列第一个url,若要全量爬取可改为循环遍历整个队列
    if url_queue:
        next_url = url_queue.pop(0)
        search(next_url)

# 初始调用,替换为你的实际起始url
start_url = ' starting url  '
search(start_url)

# 结果输出
print("全量含重复列表:", all_searches)
print("去重后列表:", unique_searches)

效果验证

按照你给出的示例:

  1. 首次爬取得到['apples', 'bananas', 'cherries', 'grapes', 'oranges']后:
    • all_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges']
    • unique_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges']
  2. 爬取apples对应url得到[ 'bananas', 'cherries', 'tangerines', 'grapefruit']后:
    • all_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges','bananas', 'cherries', 'tangerines', 'grapefruit']
    • unique_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges','tangerines', 'grapefruit']
      完全符合你的预期输出要求。如果爬取量级较大,建议把递归逻辑改成循环遍历url队列,避免超出Python默认递归深度限制报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:03