Scraping无限滚动页面效率低,求教调用aitoptools.com的API方法
解决Scraping效率问题:改用目标网站API替代Selenium
为什么你的Selenium方案效率低?
Selenium是模拟浏览器的重型工具,要加载完整页面、渲染JS、等待滚动加载,爬10000条数据时,光是页面渲染和等待的时间就会拖垮效率,完全没必要用这种方案。
如何找到并调用目标网站的API?
抓包定位API接口
- 打开目标网站,按F12调出开发者工具,切换到「Network」面板后刷新页面。
- 滚动页面加载更多工具,观察XHR/fetch类型的请求——这类请求就是网站加载工具列表的异步接口(比如WordPress常用的
/wp-admin/admin-ajax.php,或专门的列表接口)。 - 点击对应请求,查看「Request URL」「Request Method」「Form Data/Query Parameters」,这些就是调用API的核心信息。
用
requests库直接调用API(示例代码)
以下是模拟调用的模板,你需要根据抓包结果调整参数:import requests import time def fetch_all_tools(): all_tools = [] page = 1 per_page = 20 # 从抓包结果里看每页返回的数量 while True: # 替换成你抓包到的真实API地址 api_url = "https://aitoptools.com/wp-admin/admin-ajax.php" # 替换成抓包到的请求参数 payload = { 'action': 'load_more_tools', 'page': page, # 其他可能的参数:分类、排序条件等,从抓包的Form Data里复制 } # 替换成抓包到的请求头,User-Agent必须加 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://aitoptools.com/' } response = requests.post(api_url, data=payload, headers=headers) # 假设接口返回JSON格式,实际按抓包的响应格式调整 response_data = response.json() # 没有更多数据就停止循环 if not response_data.get('tools'): break all_tools.extend(response_data['tools']) page += 1 # 加短延迟避免请求过于频繁被封 time.sleep(0.5) # 提取并打印工具名称,字段名按实际返回的JSON结构调整 for tool in all_tools: print(tool['title']) print(f"共抓取到{len(all_tools)}条数据") if __name__ == "__main__": fetch_all_tools()
你提到的XMLRequest怎么操作?
浏览器里的XMLHttpRequest就是发起AJAX请求的方式,对应到Python里就是用requests库发送HTTP请求。操作步骤很简单:
- 从开发者工具的Network面板找到对应的XMLRequest请求
- 复制请求的URL、请求方法(POST/GET)
- 复制请求携带的参数(Form Data或Query String)
- 复制请求头里的必要字段(比如User-Agent、Referer)
- 把这些信息原封不动地搬到
requests的调用代码里,就能模拟出相同的请求,直接拿到数据。
注意事项
- 不要短时间内发送大量请求,加0.5-1秒的延迟,避免被网站封禁IP
- 部分接口可能需要携带Cookie或验证信息,抓包时要一起复制到请求头中
- 如果接口返回HTML片段,也可以用BeautifulSoup解析,但优先提取JSON字段,效率更高
内容的提问来源于stack exchange,提问作者dgddevelop
相关产品推荐
相关产品推荐

