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

结合BeautifulSoup与Selenium爬取页面提取onclick内master_key值

批量提取a标签中master_key的实现方案

你现有代码只实现了单个a标签的抓取,没有做属性值解析,按以下修改即可批量拿到所有目标master_key:

  • 提前导入正则模块re,预编译匹配规则:master_key后跟随的是36位带横杠的UUID格式值,用正则r'master_key=([A-F0-9-]{36})'可以精准匹配,不会和其他参数混淆
  • 把单元素查找的find()替换为find_all(),同时增加onclick属性过滤,只筛选带master_key的目标a标签,减少无效遍历
  • 点击搜索按钮后增加显式等待,等页面列表加载完成再解析源码,避免异步加载导致抓不全数据
  • 遍历所有匹配到的a标签,从onclick属性值中提取正则命中的master_key即可

修改后的完整可运行代码:

from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re

# 预编译正则匹配规则,提升遍历效率
MASTER_KEY_PATTERN = re.compile(r'master_key=([A-F0-9-]{36})', re.I)

options = Options()
options.headless = False
driver = webdriver.Firefox(options=options)

driver.get("https://annual.asaecenter.org/expo.cfm?")

driver.find_element(By.XPATH, "//*[@id='clickAgreeCookie']").click()
driver.find_element(By.XPATH, "//*[@id='search_table']/tbody/tr[7]/td[2]/input[2]").click()

# 等待参展商列表加载完成,避免源码抓取不全
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a[href="javascript:void(0)"][onclick*="master_key"]')))

page = bs(driver.page_source, 'html.parser')
# 批量查找所有符合特征的a标签
a_tags = page.find_all("a", href="javascript:void(0)", onclick=re.compile(r"master_key="))

master_keys = []
for tag in a_tags:
    onclick_content = tag.get('onclick', '')
    match_result = MASTER_KEY_PATTERN.search(onclick_content)
    if match_result:
        master_keys.append(match_result.group(1))

# 逐行打印所有提取到的master_key
for key in master_keys:
    print(key)

driver.quit()

运行后输出的每个值就是和示例格式一致的纯master_key值,会自动覆盖页面中所有可提取的目标key。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:54:17