为何soup=BeautifulSoup可正常工作,soup2却为空?如何保留原始soup?
问题解答
1. 为什么soup2为空?
你用open()得到的data是一个文件流对象,第一次传给BeautifulSoup时,已经把流里的所有内容读完了,文件指针会移到文件末尾。第二次再用同一个data创建soup2时,流里已经没有内容可以读取,所以soup2是空的。
2. 如何创建多个独立的soup实例保留原始数据?
解决办法是先把文件内容一次性读取成字符串,再用这个字符串创建多个BeautifulSoup实例,这样每个实例都是独立的,互不影响:
url = r"tk2021.xhtml" # 先读取文件内容到字符串,保存原始数据 with open(url, encoding="utf8") as f: html_content = f.read() # 基于同一个字符串创建多个独立soup soup_original = BeautifulSoup(html_content, "html.parser") # 原始版本,不做修改 soup_modified = BeautifulSoup(html_content, "html.parser") # 用于修改的版本
3. 移除xbrli:context下的xbrli:entity子标签的方法
针对用于修改的soup_modified,可以批量找到目标标签并删除:
# 找到所有xbrli:context标签 context_tags = soup_modified.find_all("xbrli:context") for context in context_tags: # 找到当前context下的xbrli:entity标签并彻底移除 entity_tag = context.find("xbrli:entity") if entity_tag: entity_tag.decompose() # 此时soup_modified是修改后的版本,soup_original仍保留原始数据 print(soup_modified.prettify())
内容的提问来源于stack exchange,提问作者henri.haiti
相关产品推荐
相关产品推荐

