You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

循环中调用requests.get()报错:No connection adapters found

解决requests循环中"No connection adapters found"错误

嘿,这个问题我一眼就看穿啦!你遇到的InvalidSchema: No connection adapters were found错误,根源非常明确——你给requests.get()传了一个列表,而不是它需要的单个字符串URL。

错误原因分析

看你循环里的这段代码:

start_urls = [olx_url % n_paginas]
r = requests.get(start_urls)

你把格式化好的URL放进了一个列表start_urls里,然后直接把这个列表传给了requests.get()。但requests的get()方法要求第一个参数必须是字符串类型的URL,它根本不知道怎么处理一个列表形式的“URL”,所以才会抛出找不到连接适配器的错误。

而且你单独运行的时候传的是字符串URL,所以没问题;循环里传了列表,就出错了。

修正后的完整代码

我帮你把代码修正了,还顺便优化了一些细节:

%%time
import requests
from pandas import json_normalize
import pandas as pd

all_urls = pd.DataFrame()
# 直接遍历1到20页,省去额外的计数变量,逻辑更清晰
for page_num in range(1, 21):
    # 定义URL模板
    olx_url = 'https://www.olx.com.gt/api/relevance/search?category=367&facet_limit=100&location=4168811&location_facet_limit=20&page=%s&sorting=desc-creation&user=16c20011d0fx61aada41'
    # 直接生成字符串URL,不要包装成列表
    current_url = olx_url % page_num
    # 发送请求(现在传的是正确的字符串URL)
    r = requests.get(current_url)
    # 解析JSON并转换为DataFrame
    json_data = r.json()
    json_data_2 = json_data['data']
    df = json_normalize(json_data_2)
    # 注意:DataFrame.append返回新对象,需要赋值回去,同时用ignore_index避免索引重复
    all_urls = all_urls.append(df, ignore_index=True)

额外的几个注意点

  • 别用列表包装单个URL:如果每次循环只处理一个页面,直接用格式化后的字符串即可,不需要放到列表里。
  • 修正拼写错误:你原来的代码里写的是all_urls.apped(df),这里apped是拼写错误,应该改成append
  • 正确使用DataFrame.append:这个方法不会修改原DataFrame,而是返回一个新的对象,所以必须把结果赋值回all_urls;加上ignore_index=True可以避免不同页面的索引重复问题。
  • 优化循环逻辑:原来的n_paginas计数变量完全可以省去,直接用range(1,21)就能遍历1到20页,代码更简洁。

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

火山引擎 最新活动