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

如何使用Selenium实现200个目标URL的批量网页数据抓取?

批量抓取实现方案

核心实现逻辑

  • 整理所有待抓取的200个同类URL为一个列表
  • 复用同一个浏览器驱动实例,避免反复启动浏览器浪费性能
  • 把单页抓取逻辑封装为独立函数,增加异常捕获逻辑,避免单个页面抓取失败导致整个程序崩溃
  • 增加页面加载等待时间,避免元素未加载完成就触发定位报错

注意:你原有代码中find_elements_by_xpath返回的是元素列表,无法直接调用.text属性,下方代码已修正该问题。

完整可运行代码

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
import time
import random

def scrape_single_page(driver, url):
    try:
        driver.get(url)
        # 随机等待1-3秒,等待页面加载完成,同时规避反爬
        time.sleep(random.uniform(1,3))
        
        # 抓取第一个目标元素文本
        text1 = driver.find_element_by_xpath('//div[@class="b1yLWE b3zFtQ"]').text
        
        # 点击目标按钮
        btn = driver.find_element_by_xpath('//button[@class="g1zAe-"]')
        btn.click()
        # 点击后等待内容加载
        time.sleep(random.uniform(0.5,2))
        
        # 批量抓取span元素文本(修正原代码的列表调用错误)
        span_elements = driver.find_elements_by_xpath('//span[@class="A2jAym q2jAym"]')
        span_text_list = [ele.text for ele in span_elements]
        
        # 抓取第二个div元素文本
        text2 = driver.find_element_by_xpath('//div[@class="b1yLWE b1zAe-"]').text
        current_url = driver.current_url
        
        # 此处可自行添加存储逻辑,比如写入csv、数据库等
        print(f"抓取成功:{current_url}\ntext1:{text1}\nspan内容:{span_text_list}\ntext2:{text2}\n---")
        return True
    except (NoSuchElementException, TimeoutException) as e:
        print(f"抓取失败:{url},错误原因:{str(e)}")
        return False

if __name__ == "__main__":
    chrome_path = r"C:\Users\lenovo\Downloads\chromedriver_win32 (5)\chromedriver.exe"
    driver = webdriver.Chrome(chrome_path)
    
    # 待抓取URL列表,200个URL按格式填入即可
    # 如果URL有规律,可直接通过循环生成,无需手动填写
    # 如果URL存储在txt文件每行一个,可用以下代码读取:
    # with open('urls.txt', 'r', encoding='utf-8') as f:
    #     urls = [line.strip() for line in f if line.strip()]
    urls = [
        "https://www.kijijiautos.ca/vip/22442312",
        # 剩余199个URL在此处补充
    ]
    
    success_count = 0
    fail_count = 0
    for url in urls:
        if scrape_single_page(driver, url):
            success_count += 1
        else:
            fail_count += 1
        # 每次抓取完成后随机间隔,避免请求频率过高被封禁
        time.sleep(random.uniform(1,2))
    
    print(f"全部任务执行完成,成功抓取{success_count}个,失败{fail_count}个")
    # 关闭浏览器
    driver.quit()

额外优化建议

  • URL批量生成/读取:如果200个URL只有末尾ID不同,可直接循环拼接生成列表;如果是零散URL,存到txt文件每行一个,用代码里注释的读取方法即可,无需手动逐个复制
  • 数据存储:可根据需求把抓取到的内容写入csv、Excel或者本地数据库,不要仅做打印输出
  • 异常优化:如果需要重试失败的URL,可以把失败的URL单独存到列表里,全部跑完后再重新遍历重试一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:18:02