如何使用BeautifulSoup4筛选href含指定字符串3080的链接并打印
筛选含指定字符串href链接的实现方案
你只需要修改BeautifulSoup的元素选择逻辑即可,有两种实现方式,推荐直接用CSS选择器规则一步筛选,修改后的完整代码如下:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service import time import driver_functions gpu = '3080' url = f'https://www.alternate.de/listing.xhtml?q={gpu}' options = webdriver.ChromeOptions() options.add_argument('--headless') if __name__ == '__main__': browser = webdriver.Chrome(options=options, service=Service('chromedriver.exe')) try: browser.get(url) time.sleep(2) html = browser.page_source soup = BeautifulSoup(html, 'html.parser') # 核心修改:CSS选择器直接匹配父容器下href包含3080的a标签 gpu_list = soup.select('div.grid-container.listing a[href*="3080"]') for link in gpu_list: # 加兜底判断避免无href属性的标签报错 if 'href' in link.attrs: print(link['href']) browser.quit() except: driver_functions.browserstatus(browser)
关键修改说明
- 修正了原代码中
select方法的错误用法:soup.select()的第一个参数是完整CSS选择器,类名规则需要直接写在选择器字符串中,不需要单独传class_参数。 - 新增href属性匹配规则:CSS选择器语法
[href*="目标字符串"]可以直接筛选出href属性包含指定字符串的元素,无需额外循环判断,执行效率更高。
如果更习惯在循环中做判断,也可以用第二种写法,把选择和筛选拆分:
# 先选中所有目标区域的a标签 gpu_list = soup.select('div.grid-container.listing a') for link in gpu_list: # 取出href属性,判断是否包含3080 href = link.get('href', '') if '3080' in href: print(href)
两种写法效果完全一致,可根据你的编码习惯选择。
内容的提问来源于stack exchange,提问作者sawnic rawcer
相关产品推荐
相关产品推荐

