如何一次性加载无限滚动中的所有条目以便在Python中解析HTML。
如何一次性加载无限滚动中的所有条目以便在Python中解析HTML。
我正在尝试从这个页面提取信息。该页面每次加载10个项目,我需要滚动来加载所有条目(总共100个)。我能够解析HTML并获取我需要的前10个条目的信息,但我希望在解析HTML之前完全加载所有条目。
我正在使用Python、requests和BeautifulSoup。当页面加载前10个条目时,我解析页面的方式如下:
from bs4 import BeautifulSoup import requests s = requests.Session() r = s.get('https://medium.com/top-100/december-2013') page = BeautifulSoup(r.text)
但这只加载了前10个条目。因此,我查看了页面并获取了用于加载后续条目的AJAX请求,我得到了响应,但它是一个奇怪的JSON,我宁愿使用HTML解析器而不是解析JSON。下面是代码:
from bs4 import BeautifulSoup import requests import json s = requests.Session() url = 'https://medium.com/top-100/december-2013/load-more' payload = {"count":100} r = s.post(url, data=payload) page = json.loads(r.text[16:]) #跳过一些扰乱JSON的字符
这给我提供了数据,但它是一个非常冗长和复杂的JSON,我更愿意加载页面上的所有数据并简单地解析HTML。此外,渲染的HTML提供比JSON响应更多的信息(即的姓名而不是模糊的用户ID等)。这里有一个类似的问题here,但没有相关的答案。理想情况下,我想进行POST调用,然后请求HTML并解析它,但我还没有能够做到这一点。