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)
效果验证
按照你给出的示例:
- 首次爬取得到
['apples', 'bananas', 'cherries', 'grapes', 'oranges']后:all_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges']unique_searches = ['apples', 'bananas', 'cherries', 'grapes', 'oranges']
- 爬取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
相关产品推荐
相关产品推荐

