使用BeautifulSoup筛选含指定字符串的href链接及页面跳转问题
问题分析与代码修改方案
现有代码问题
现有代码的判断逻辑存在错误,if 'Archive.aspx?ADID=' in page.text 是判断整个页面文本是否包含目标字符串,只要页面存在该内容,所有a标签的循环都会触发打印逻辑,因此会输出全部链接。
正确筛选链接的代码修改
你需要把判断逻辑改为检查当前a标签的href属性是否包含目标关键词,同时过滤无href属性的a标签、补全相对路径为可直接访问的完整链接,修改后代码如下:
from bs4 import BeautifulSoup import requests base_url = "https://www.ci.atherton.ca.us" url = "https://www.ci.atherton.ca.us/Archive.aspx?AMID=41" key = '/Archive.aspx?ADID=' page = requests.get(url) soup = BeautifulSoup(page.text, 'html.parser') target_links = [] # 加href=True参数自动过滤无href属性的a标签,避免后续取值报错 for link in soup.find_all('a', href=True): href_val = link.get('href') if key in href_val: # 拼接相对路径为完整访问链接 full_link = base_url + href_val if href_val.startswith('/') else href_val target_links.append(full_link) print(full_link)
批量跳转访问目标链接的实现
拿到筛选后的链接列表后,循环遍历发送请求即可,建议加访问间隔避免触发站点反爬策略:
import time for index, link in enumerate(target_links, 1): print(f"正在访问第{index}个链接:{link}") try: sub_page = requests.get(link, timeout=10) # 此处可添加你对当前子页面的解析、存储逻辑 print(f"访问成功,页面状态码:{sub_page.status_code}") # 访问间隔可根据需求调整 time.sleep(1) except Exception as e: print(f"访问{link}失败,错误信息:{e}")
内容的提问来源于stack exchange,提问作者lsignori
相关产品推荐
相关产品推荐

