使用Python+BeautifulSoup抓取HTML转JSON遇TypeError求助
请你提供需要使用Markdown格式化的具体内容,我会按照你给出的规则进行处理。
如果是针对你之前的爬虫问题,以下是符合格式要求的解决方案:
问题解决:抓取指定元素文本并转为JSON
错误原因
soup.findAll()返回的是ResultSet对象(类列表的元素集合),而json.loads()仅能处理字符串、字节类JSON格式内容,直接传入ResultSet必然触发类型错误。另外你需要的是纯文本内容,而非HTML结构,需先提取文本再转JSON。
修正后的代码
import requests from bs4 import BeautifulSoup import json URL = "https://quranromanurdu.com/chapter/1" page = requests.get(URL) soup = BeautifulSoup(page.content, "html.parser") # id唯一,用find()直接获取单个元素更高效 content_div = soup.find('div', attrs={"id": "contentpara"}) # 提取div内纯文本,去除冗余空白并保留换行 content_text = content_div.get_text(strip=True, separator='\n') # 将文本包装为字典(JSON可序列化结构) data = {"chapter_content": content_text} # 转为JSON字符串,ensure_ascii=False保证乌尔都语文本正常显示 json_result = json.dumps(data, ensure_ascii=False, indent=2) print(json_result)
关键修改说明
- 替换
findAll()为find():HTML中id属性唯一,直接获取单个元素更合理。 - 提取纯文本:用
get_text()获取元素内的文本内容,而非保留HTML结构。 - 构建可序列化结构:将文本放入字典,因为JSON仅支持特定Python类型(dict、list、str等)的序列化,包装后结构更清晰。
- 用
json.dumps()替代json.loads():loads()是解析JSON字符串为Python对象,dumps()是将Python对象转为JSON字符串,此处需要后者。
内容的提问来源于stack exchange,提问作者Arbaz ali
相关产品推荐
相关产品推荐

