You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取下拉菜单:获取CNSs下拉菜单及后续数据爬取需求

爬取“get CNSs”下拉菜单及后续对齐链接的解决方案

我来帮你梳理一下完成这个爬取流程的具体步骤,重点解决你提到的核心问题——获取下拉菜单里的所有跳转选项,再一步步拿到目标对齐链接的信息:

一、提取“get CNSs”下拉菜单的所有跳转选项

首先你得从主链接进入序列页面,接下来要定位到这个下拉菜单的HTML元素,通常这类下拉菜单是<select>标签,里面的每个选项对应<option>标签,要么自带跳转URL的value属性,要么通过JS触发跳转。

静态页面爬取(无动态加载)

如果页面是纯静态的,用requests+BeautifulSoup就能搞定:

import requests
from bs4 import BeautifulSoup

# 替换成你实际的序列页面URL
sequence_page_url = "你的序列页面地址"
# 模拟浏览器请求头,避免被反爬拦截
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}

# 获取序列页面内容
response = requests.get(sequence_page_url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 定位下拉菜单——这里要根据页面实际的HTML结构调整选择器,比如id/class
cnss_dropdown = soup.find("select", id="get-cnss-dropdown")  # 替换成页面真实的id或class
if cnss_dropdown:
    # 提取所有选项的跳转URL
    option_urls = [opt["value"] for opt in cnss_dropdown.find_all("option") if opt.has_attr("value")]
else:
    print("没找到get CNSs下拉菜单,检查页面HTML结构是否正确")

动态页面爬取(JS加载内容)

如果下拉菜单是JS动态渲染的(比如打开页面后才加载选项),静态爬取工具拿不到内容,得用浏览器自动化工具,比如Selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()  # 需要提前配置ChromeDriver
driver.get(sequence_page_url)
time.sleep(2)  # 给页面加载留时间

# 定位下拉菜单
cnss_dropdown = driver.find_element(By.ID, "get-cnss-dropdown")
# 提取所有选项的跳转链接
options = cnss_dropdown.find_elements(By.TAG_NAME, "option")
option_urls = [opt.get_attribute("value") for opt in options if opt.get_attribute("value")]

driver.quit()  # 用完记得关闭浏览器

二、遍历选项页面,获取“get all CNSs alignments”链接并爬取信息

拿到所有跳转URL后,逐个访问这些页面,找到目标链接并提取内容:

for url in option_urls:
    # 处理相对URL(如果有的话),转成完整地址
    if not url.startswith("http"):
        base_url = f"{sequence_page_url.split('/')[0]}//{sequence_page_url.split('/')[2]}"
        url = f"{base_url}/{url.lstrip('/')}"
    
    # 请求当前选项页面
    page_resp = requests.get(url, headers=headers)
    page_soup = BeautifulSoup(page_resp.text, "html.parser")
    
    # 定位目标链接——根据页面实际文本或属性调整
    alignment_link = page_soup.find("a", string="get all CNSs alignments")
    if alignment_link:
        alignment_url = alignment_link["href"]
        # 同样处理相对URL
        if not alignment_url.startswith("http"):
            alignment_url = f"{base_url}/{alignment_url.lstrip('/')}"
        
        # 爬取对齐页面的信息,这里可以根据需求解析内容(比如序列、表格等)
        alignment_resp = requests.get(alignment_url, headers=headers)
        alignment_content = alignment_resp.text
        print(f"成功获取 {alignment_url} 的内容")
        # 这里可以添加代码,把内容保存到文件或数据库
    else:
        print(f"在页面 {url} 里没找到get all CNSs alignments链接")

几个关键提醒

  • 反爬应对:记得给请求加间隔(比如time.sleep(1)),避免频繁请求被封IP;如果遇到验证码,可能需要用代理或者验证码识别工具。
  • HTML结构变化:网站更新后,下拉菜单的id、目标链接的文本可能会变,要定期检查选择器是否有效。
  • 动态内容进阶:如果Selenium太慢,可以试试Playwright,它的自动化效率更高,还支持无头模式。

内容的提问来源于stack exchange,提问作者bandidopabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:15