【问题标题】:How to load infinite scroll pages faster?如何更快地加载无限滚动页面?
【发布时间】:2022-02-23 02:28:28
【问题描述】:

https://immutascan.io/address/0xac98d8d1bb27a94e79fbf49198210240688bb1ed

这个 URL 有 100k+ 行,我正在尝试抓取。他们回去大约一个月(我相信 2022 年 1 月 10 日),但加载了 7-8 的徽章。

现在我有一个宏正在慢慢向下滚动页面,它正在工作,但每天需要大约 8-10 个小时的行。

截至目前,当新行加载时,会立即加载 2-3 个项目,然后随着时间的推移加载一些项目。我不需要加载缓慢的部分,并且希望它们加载得更快或根本不加载。

有没有办法阻止元素加载以加快加载额外行的速度?

我正在使用通过鼠标滚轮向下滚动的自动热键脚本,效果最佳。

我也尝试过 Chrome 扩展程序,但速度较慢。

我曾经发现过一个 python 脚本,但它并不比 autohotkey 快。

答案: Immutable X 有一个 API,所以我使用它而不是这个做同样事情的网站。这是工作代码:

import requests
import time
import pandas as pd
import time

URL = "https://api.x.immutable.com/v1/orders"
bg_output = []
params = {'status': 'filled',
          'sell_token_address': '0xac98d8d1bb27a94e79fbf49198210240688bb1ed'}

with requests.Session() as session:
    while True:
        (r := session.get(URL, params=params)).raise_for_status()
        data = r.json()
        for value in data['result']:
            orderID = value['order_id']
            info = value["sell"]["data"]["properties"]["name"]
            wei = value["buy"]["data"]["quantity"]
            decimals = value["buy"]["data"]["decimals"]
            spacer = "."
            eth = float(wei[decimals:] + spacer + wei[:decimals])
            print(f'Count={len(bg_output)},Order ID={orderID}, Info={info}, Eth={eth}')
            bg_output.append(f'Count={len(bg_output)},Order ID={orderID}, Info={info}, Eth={eth}')
            timestr = time.strftime("%Y%m%d")
            pd.DataFrame(bg_output).to_csv('bg_output' + timestr + '.csv')
            #print(len(bg_output))
        time.sleep(1)    
        if (cursor := data.get('cursor')):
            params['cursor'] = cursor
        else:
            print(bg_output)
            break
            
print(bg_output)
print("END")

【问题讨论】:

    标签: javascript html selenium web-scraping automation


    【解决方案1】:

    您是否考虑过直接使用他们的 API?滚动页面时,请查看浏览器的开发工具“网络”选项卡。在那里你可以看到对他们 API 的实际调用。查看对 URL 的所有 POST 请求

    https://3vkyshzozjep5ciwsh2fvgdxwy.appsync-api.us-west-2.amazonaws.com/graphql
    

    尝试调整这些 API 调用,以便您可以通过他们的 GraphQL-API 正确获取数据,而无需滚动实际页面。

    【讨论】:

    • 我没有使用 API 的经验。您推荐我使用的任何术语或工具?
    • 我发现我尝试加载的数据实际上来自一个带有 API 的站点。链接似乎在此处(tokentrove.io/docs),但是当我尝试对 Chrome 使用“Talend API Tester”时,它一直说“缺少身份验证令牌”,但我看不到获得一个的方法,文档也没有解决它...有什么想法吗?
    • 我现在正在使用 API(感谢 Mue!)。我已经用我正在使用的代码更新了我的问题。
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多