报错'int' object has no attribute 'text'
时间: 2025-06-10 10:43:30 浏览: 23
这个错误信息表明,你的代码中尝试对一个整数 (`int`) 对象调用了 `.text` 属性。通常这种情况发生在 BeautifulSoup 解析网页时,某些元素可能不存在或提取的内容类型不正确。
以下是一个修正后的代码示例,并详细解释了如何避免这种错误。
---
### 修正后的代码
```python
import requests
from bs4 import BeautifulSoup
import time
import csv
url = 'https://www.weather.com.cn/weather/101010100.shtml'
response = requests.get(url)
html_content = response.text
soup = BeautifulSoup(html_content, 'lxml')
# 提取所有天气信息的 <li> 标签
datetimes = soup.find_all('li', class_="sky")
weather_list = []
for datetime_item in datetimes:
try:
# 获取日期
date_element = datetime_item.find("h1")
date = date_element.text.strip() if date_element else "N/A"
# 获取天气描述
weather_element = datetime_item.find("p", class_="wea")
weather = weather_element.text.strip() if weather_element else "N/A"
# 获取温度范围
temp_element = datetime_item.find("p", class_="tem")
if temp_element:
tem_high = temp_element.span.text.strip() if temp_element.span else "N/A"
tem_low = temp_element.i.text.strip() if temp_element.i else "N/A"
else:
tem_high, tem_low = "N/A", "N/A"
# 打印和保存数据
print(f"今天是:{date}, 天气是:{weather}, 气温范围是:{tem_low}~{tem_high}")
weather_list.append([date, weather, f"{tem_low}~{tem_high}"])
except AttributeError as e: # 捕获异常并记录
print(f"发生错误: {e}")
continue
time.sleep(2)
# 将数据写入 CSV 文件
file_name = 'weather.csv'
with open(file_name, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["日期", "天气", "气温"]) # 写入表头
writer.writerows(weather_list) # 写入天气数据
```
---
### 解释上述代码
1. **错误来源**:
- 报错 `'int' object has no attribute 'text'` 表明你在尝试对整数对象调用 `.text` 方法。
- 这种情况通常是由于某些 HTML 元素不存在(例如 `find()` 返回 `None`),或者提取的数据类型不符合预期。
2. **解决方法**:
- 在提取每个字段之前,检查对应的元素是否存在。
- 使用条件语句(如 `if element:`)来确保只有在元素存在的情况下才调用 `.text` 方法。
- 如果元素不存在,可以提供默认值(如 `"N/A"`)以避免程序崩溃。
3. **改进点**:
- 使用 `try-except` 块捕获潜在的异常,防止程序因单个错误而中断。
- 添加日志输出(如 `print(f"发生错误: {e}")`),方便调试和定位问题。
4. **代码逻辑**:
- 遍历所有符合条件的 `<li>` 标签,提取日期、天气描述和温度范围。
- 如果某个字段缺失,则使用 `"N/A"` 替代。
- 最后将结果保存到 `weather.csv` 文件中。
---
### 示例输出
假设从网页中提取到以下数据:
```plaintext
今天是:星期一, 天气是:晴, 气温范围是:20~30
今天是:星期二, 天气是:多云, 气温范围是:18~25
今天是:星期三, 天气是:N/A, 气温范围是:N/A~N/A
```
生成的 `weather.csv` 文件内容如下:
| 日期 | 天气 | 气温 |
|--------|--------|----------|
| 星期一 | 晴 | 20~30 |
| 星期二 | 多云 | 18~25 |
| 星期三 | N/A | N/A~N/A |
---
阅读全文
相关推荐


















