使用BeautifulSoup find_all时,如何跳过含https://的链接结果?
解决方案
直接在打印前加个判断,跳过包含https://的条目即可,修改后的代码如下:
import requests from bs4 import BeautifulSoup for page_number in range(1, 10): url = f"xyz{page_number}" # 这里的page_number +=1是多余的,range循环会自动递增页码 req = requests.get(url) src = req.text soup = BeautifulSoup(src, "lxml") get_car_links = soup.find_all(class_="info-container") for i in get_car_links: car_links = i.find("a", class_="title") if car_links: # 额外加个判断,避免找不到a标签时报错 car_datas = car_links.get("href") if "https://" not in car_datas: # 核心过滤逻辑 print(car_datas)
关键说明
- 核心逻辑是
if "https://" not in car_datas:,只有不包含https://的链接才会被输出 - 额外添加
if car_links:判断,防止页面中某个info-container下没有目标a标签时,调用get("href")抛出异常 - 原代码里的
page_number +=1属于冗余代码,range(1,10)会自动从1循环到9,每次循环page_number会自动取到下一个值,无需手动递增
内容的提问来源于stack exchange,提问作者Alberi
相关产品推荐
相关产品推荐

