如何创建向Beautiful Soup传入内容的函数?遇报错或无法输出文本
解决你的Beautiful Soup函数问题
嘿,我看你当前的代码有几个关键问题导致没法实现你想要的功能:
- 你定义了参数
cont但完全没用到,等于摆设; - URL被硬编码死了,没法灵活指定其他页面或者传入自定义内容;
- 另外,创建BeautifulSoup对象时最好指定解析器(比如
html.parser),不然会弹出警告。
下面给你两种实用的改进方案,根据你的需求选就行:
方案1:传入URL,提取页面文本
这个版本可以让你传入任意URL,自动爬取并提取页面纯文本:
from bs4 import BeautifulSoup import urllib.request def get_page_text(url): try: # 打开目标URL并获取页面内容 content = urllib.request.urlopen(url) # 初始化BeautifulSoup,指定解析器避免警告 soup = BeautifulSoup(content, 'html.parser') # 返回处理后的纯文本(strip=True去除多余空白) return soup.get_text(strip=True) except Exception as e: # 捕获网络或解析异常,避免程序崩溃 print(f"处理出错: {e}") return None # 使用示例:传入机器学习维基百科的URL ml_url = "https://en.wikipedia.org/wiki/Machine_learning" page_text = get_page_text(ml_url) if page_text: print(page_text)
方案2:直接传入HTML内容,提取文本
如果你的场景是已经拿到了HTML内容(比如从其他渠道获取的),可以用这个函数直接把内容传给BeautifulSoup:
from bs4 import BeautifulSoup def extract_html_text(html_content): # 直接传入HTML内容给BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # 返回纯文本 return soup.get_text(strip=True) # 使用示例:传入一段测试HTML test_html = """<html> <head><title>测试页面</title></head> <body> <h1>Hello Beautiful Soup</h1> <p>这是一段用于测试的文本内容</p> </body> </html>""" print(extract_html_text(test_html))
这两个方案都解决了你原代码的问题:
- 真正用到了传入的参数,实现了灵活传入内容/URL的需求;
- 加入了异常处理,让函数更健壮;
- 指定了解析器,符合最佳实践。
内容的提问来源于stack exchange,提问作者Ogbeide mayowa
相关产品推荐
相关产品推荐

