如何更快地加载无限滚动页面?
How to load infinite scroll pages faster?
https://immutascan.io/address/0xac98d8d1bb27a94e79fbf49198210240688bb1ed
这个 URL 有 10 万多行我正在尝试抓取。他们回去大约一个月(我相信是 2022 年 10 月 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")
您是否考虑过直接使用他们的 API?滚动页面时,请查看浏览器的开发工具“网络”选项卡。在那里您可以看到对他们 API 的实际调用。查看对 URL
的所有 POST 请求
https://3vkyshzozjep5ciwsh2fvgdxwy.appsync-api.us-west-2.amazonaws.com/graphql
尝试调整这些 API 调用,以便您可以通过它们 GraphQL-API 获取正确的数据,而无需滚动实际页面。
https://immutascan.io/address/0xac98d8d1bb27a94e79fbf49198210240688bb1ed
这个 URL 有 10 万多行我正在尝试抓取。他们回去大约一个月(我相信是 2022 年 10 月 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")
您是否考虑过直接使用他们的 API?滚动页面时,请查看浏览器的开发工具“网络”选项卡。在那里您可以看到对他们 API 的实际调用。查看对 URL
的所有 POST 请求https://3vkyshzozjep5ciwsh2fvgdxwy.appsync-api.us-west-2.amazonaws.com/graphql
尝试调整这些 API 调用,以便您可以通过它们 GraphQL-API 获取正确的数据,而无需滚动实际页面。