使用pandas读取CSV列作为检索参数请求网站报No connection adapters错误
问题原因
- 你通过
pd.read_csv读取数据后得到的Chem是DataFrame类型对象,而非你预期的分子式字符串。直接将DataFrame与URL字符串拼接时,pandas会输出包含列名、行号的完整表格文本,生成非法URL格式,requests无法识别该格式才抛出对应错误。
修复后的代码
import requests import pandas as pd from bs4 import BeautifulSoup as BS import time # 读取CSV文件 df = pd.read_csv('single.csv', usecols=['Molecular Formula']) # 遍历每个分子式单独发起请求 for formula in df['Molecular Formula']: # 用params参数自动处理URL编码,避免手动拼接出错 query_params = { 'utf8': '✓', 'query': formula, 'searcher': 'metabolites', 'button': '' } res = requests.get('https://hmdb.ca/unearth/q', params=query_params) # 增加请求状态校验,避免异常终止 if res.status_code != 200: print(f"分子式{formula}查询失败,状态码:{res.status_code}") time.sleep(1) continue soup = BS(res.content, 'html.parser') hit_list = soup.find_all('div', attrs={'class':'hit-name'}) print(f"\n=== {formula} 检索结果 ===") for div in hit_list: print(div.text.strip()) # 增加请求间隔,避免被网站拦截 time.sleep(1)
补充说明
- 用requests内置的
params参数传递查询条件,会自动对特殊字符做URL编码,比手动拼接URL兼容性更好 - 批量请求时增加间隔时间,可降低被网站反爬机制拦截的概率
内容的提问来源于stack exchange,提问作者Charlie P
相关产品推荐
相关产品推荐

