使用Pandas/Python提取DataFrame中URL网页标题时出错求助
问题分析与解决
错误原因
- 列名大小写不匹配:DataFrame定义的列是
'URL',但代码里写的是df['url'](小写),导致找不到对应列。 apply方法使用错误:apply需要传入函数对象,而你写的geturl()是直接调用函数,会把函数返回值传给apply,这不符合要求。- 缺少异常处理:如果某个URL无法访问、网页没有title标签,会直接抛出错误中断整个流程。
修正后的代码
import pandas as pd from urllib.request import urlopen from bs4 import BeautifulSoup def geturl(x): try: # 打开URL并解析网页 with urlopen(x) as response: soup = BeautifulSoup(response, 'html.parser') # 判断网页是否存在title标签 if soup.title: return soup.title.get_text().strip() else: return '无标题' except Exception as e: # 捕获异常,避免单个URL失败导致整体流程中断 return f'获取失败: {str(e)}' # 构造DataFrame data = [['1001','https://msn.com'],['1002','https://google.com'],['1003','https://yahoo.com']] df = pd.DataFrame(data, columns=['ID', 'URL']) # 修正列名,传入函数对象给apply df['title'] = df['URL'].apply(geturl) print(df)
关键说明
- 统一列名为
'URL',和DataFrame定义保持一致,解决列找不到的问题。 apply(geturl)传入的是函数本身,pandas会自动将每一行的URL作为参数传递给geturl函数。- 新增
try-except异常处理,覆盖网络错误、网页结构异常等情况,保证批量处理时不会因单个URL失败而终止。
内容的提问来源于stack exchange,提问作者120m256
相关产品推荐
相关产品推荐

