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

无法从Gotriple页面爬取链接,AsyncHTMLSession渲染仅得占位符

解决思路与方案

优化AsyncHTMLSession等待逻辑

固定sleep没法保证内容加载完成,换用等待目标元素出现的方式,精准触发内容加载完成后的提取操作:

async def FromTriple(self, doi):
    asession = AsyncHTMLSession()
    url = 'https://www.gotriple.eu/documents?q=' + doi[16:]

    website = await asession.get(url)
    # 等待实际结果链接加载,超时10秒
    await website.html.arender(
        wait_for='.gt-search-result__item a',
        timeout=10000,
        keep_page=True
    )
    
    links = website.html.find('.gt-search-result__item a')
    # 整理成可用的链接数据
    result = [(link.text, link.attrs['href']) for link in links if 'href' in link.attrs]
    await asession.close()
    return result

直接调用API(推荐)

观察页面请求会发现,网站的搜索结果是通过后端API返回的,绕开页面渲染直接请求API更高效稳定:

import aiohttp

async def FromTriple(self, doi):
    doi_suffix = doi[16:]
    api_url = f'https://api.gotriple.eu/search/documents?q={doi_suffix}'
    
    async with aiohttp.ClientSession() as session:
        async with session.get(api_url) as resp:
            if resp.status != 200:
                return []
            data = await resp.json()
            # 从API返回的JSON中提取链接,字段根据实际返回调整
            links = []
            for item in data.get('hits', []):
                # 示例:假设链接存储在item的'web_url'字段,实际以API返回为准
                if 'web_url' in item:
                    links.append(item['web_url'])
            return links

小提示

  • 可以打开浏览器开发者工具的Network面板,搜索documents找到对应的API请求,查看返回的JSON结构,确认要提取的字段名。
  • 这种方法不需要处理页面渲染的各种问题,速度更快,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:28:36