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

如何用BeautifulSoup获取klikdokter网站全部药品链接(含查看更多内容)

解决方案

问题原因

你当前使用的requests仅能获取页面首次加载的静态HTML内容,页面上「查看更多」按钮触发的是异步动态加载请求,这部分内容不会包含在初始的静态响应里,所以会出现内容遗漏。

可用修改方案

方案1:抓异步接口请求(优先推荐,效率更高)

操作步骤:

  • 打开浏览器F12开发者工具,切换到「网络」面板,筛选「Fetch/XHR」请求
  • 点击页面上任意「查看更多」按钮,查看触发的新请求,复制请求地址、请求头、参数规则
  • 按参数规则构造所有分类的分页请求,直接拉取全量药品数据,不需要解析前端页面

方案2:使用自动化工具模拟浏览器操作

如果不想抓包,可以用Selenium、Playwright这类工具模拟真人点击「查看更多」按钮,等内容完全加载后再提取链接,示例代码如下(以Playwright为例):

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_5_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15'
BASEURL = 'https://www.klikdokter.com/obat'

with sync_playwright() as p:
    # 启动浏览器,调试时可把headless设为False显示浏览器界面
    browser = p.chromium.launch(headless=True, user_agent=AGENT)
    page = browser.new_page()
    page.goto(BASEURL, wait_until='networkidle')
    
    # 按钮文本为印尼语,可根据实际页面展示替换定位规则
    more_buttons = page.locator('text=Lihat Semua')
    for i in range(more_buttons.count()):
        try:
            more_buttons.nth(i).click(timeout=3000)
            # 等待内容加载完成
            page.wait_for_load_state('networkidle')
        except:
            # 跳过点击失败的按钮,避免程序中断
            continue
    
    # 拿到加载完成后的完整页面源码,用BeautifulSoup解析
    soup = BeautifulSoup(page.content(), 'html.parser')
    for tag in soup.find_all('a', class_='topics-index--section__item-link'):
        href = tag.get('href')
        if href is not None:
            print(href)
    
    browser.close()

注意事项

  • 构造请求时要保持和浏览器请求一致的User-Agent、Cookie等头信息,避免被反爬拦截
  • 可以适当添加请求延迟,避免请求频率过高被封IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:09:01