网页爬取问题:部分页面缺失致AttributeError,求if判断代码
解决爬取缺失页面时的AttributeError问题
嘿,这个问题我熟!你遇到的AttributeError是因为当页面不存在(比如第5、7页)时,soup.find(class_="text-muted")找不到对应的元素,会返回None。这时候你再去访问items.previous_sibling或者items.text,自然就会报错啦。
解决方法很简单,只需要在使用items之前判断它是否存在就行。同时我还加了请求状态码的检查,能更高效地跳过无效页面,来看修改后的完整代码:
import requests from bs4 import BeautifulSoup base_url = "http://cbcs.fastvturesults.com/student/1sp15me00" for page in range(1, 10): r = requests.get(base_url + str(page)) # 先检查请求是否成功,跳过无效页面 if r.status_code != 200: print(f"第{page}页请求失败,状态码:{r.status_code}") continue c = r.content soup = BeautifulSoup(c, "html.parser") items = soup.find(class_="text-muted") # 核心判断:如果未找到目标元素,直接跳过当前循环 if not items: print(f"第{page}页未找到目标内容,跳过") continue # 找到元素后正常输出内容 print(f"{items.previous_sibling}\n{items.text}")
关键改动说明:
- 请求状态码检查:当页面返回404(不存在)或其他错误状态码时,直接跳过HTML解析步骤,减少不必要的计算,同时给出明确提示。
- 元素存在性判断:
if not items:会在items为None(未找到目标元素)时触发,跳过后续会报错的代码逻辑。 - 简化循环写法:
range(1,10)等价于range(1,10,1),步长默认是1,代码更简洁。
这样修改后,不管是页面缺失还是页面内没有目标元素,都不会抛出错误,还能清晰看到哪些页面出了问题,方便后续排查~
内容的提问来源于stack exchange,提问作者Sayeed
相关产品推荐
相关产品推荐

