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

使用Requests模块时重复请求首个URL的问题排查求助

问题排查与解决方案

问题根源

首个页面被重复请求的问题,核心原因是np.vectorize的内部机制——这个函数是语法糖而非真正的向量化实现,它在执行前会调用一次传入的函数(也就是你的Scraper.get)来推断输出数据类型,这就导致第一个Page对象被额外请求了一次。

解决方案

方案1:改用普通循环(推荐)

直接用Python原生循环遍历numpy数组,逻辑直观且避免vectorize的隐性调用:

@staticmethod
def scrape(page_load: np.array):
    for page in page_load:
        Scraper.get(page)
    return page_load

方案2:指定otypes参数(保留vectorize的情况)

如果坚持使用np.vectorize,可以显式指定otypes参数,跳过自动类型推断步骤:

@staticmethod
def scrape(page_load: np.array):
    # 由于get方法无返回值,指定otypes为object类型
    get = np.vectorize(Scraper.get, otypes=[object])
    get(page_load)
    return page_load

额外优化建议

  • 爬虫场景下用Python列表存储Page对象更轻便,可避免numpy对象数组带来的隐性问题;
  • 给请求方法添加异常捕获,防止单个请求失败导致整个爬虫中断:
@staticmethod
def get(page):
    try:
        page.html = requests.get(page.url.string, headers=Scraper.HEADERS).text
        print(f"Scraping page {page.url.page_number}")
    except requests.exceptions.RequestException as e:
        print(f"Failed to scrape page {page.url.page_number}: {str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:52:46