调用trafilatura.extract报错:收到意外关键字参数'json_output'
你遇到的TypeError: extract() got an unexpected keyword argument 'json_output'报错,核心原因是trafilatura库版本迭代后废弃了旧参数:
- 教程编写时使用的是0.9.x及更早版本的trafilatura,使用
json_output=True指定返回JSON格式结果 - 1.0及以上版本的trafilatura移除了
json_output参数,替换为output_format参数,需要传入output_format='json'实现同样效果
方案1:修改代码适配新版本trafilatura(推荐)
将你自定义函数中两处调用trafilatura.extract的json_output=True参数,替换为output_format='json'即可,修改后的函数代码如下:
import trafilatura import json import requests import numpy as np from requests.exceptions import MissingSchema # 保持你原有的beautifulsoup_extract_text_fallback函数实现即可 def beautifulsoup_extract_text_fallback(content): from bs4 import BeautifulSoup soup = BeautifulSoup(content, 'html.parser') return soup.get_text(separator=' ', strip=True) def extract_text_from_single_web_page(url): downloaded_url = trafilatura.fetch_url(url) try: # 仅修改参数名:json_output=True → output_format='json' a = trafilatura.extract(downloaded_url, output_format='json', with_metadata=True, include_comments = False, date_extraction_params={'extensive_search': True, 'original_date': True}) except AttributeError: # 第二处调用同样修改参数 a = trafilatura.extract(downloaded_url, output_format='json', with_metadata=True, date_extraction_params={'extensive_search': True, 'original_date': True}) if a: json_output = json.loads(a) return json_output['text'] else: try: resp = requests.get(url) # 仅从请求成功的响应中提取文本 if resp.status_code == 200: return beautifulsoup_extract_text_fallback(resp.content) else: # 处理Trafilature和BeautifulSoup4工具的所有提取失败场景 return np.nan # 处理没有正确协议的URL场景 except MissingSchema: return np.nan
修改完成后重新运行你的测试代码即可正常输出结果。
方案2:安装旧版本trafilatura匹配教程代码
如果你不想修改原有代码,可以直接安装教程对应的旧版本库,执行以下命令即可:
pip install trafilatura==0.9.3
安装完成后原有代码无需改动即可正常运行。
内容的提问来源于stack exchange,提问作者sirimiri
相关产品推荐
相关产品推荐

