Web 抓取惰性列表(延迟加载)使用 python 请求(没有 selenium/scarpy)

Web scraping lazy list (lazy loading) using python request (without selenium/scarpy)

我为自己编写了一个简单的脚本作为练习,用于查找谁在 bandcamp 上购买了与我相同的曲目,以便理想地找到具有相似品味的帐户,因此他们的帐户中有更多相同的音乐。

问题是 album/track 页面上的粉丝列表是延迟加载的。使用 python 的 requestsbs4 我只能从潜在的 700 个结果中得到 60 个结果。

我正在尝试弄清楚如何发送请求,即在此处 https://pitp.bandcamp.com/album/fragments-distancing 打开更多列表。当我在查找器中单击时找到发送的请求后,我使用 json 请求使用 requests 发送它,尽管没有任何结果

res = requests.get(track_link)
    open_more = {"tralbum_type":"a","tralbum_id":3542956135,"token":"1:1609185066:1714678:0:1:0","count":100}
    for i in range(0,3):
        requests.post(track_link, json=open_more)

感谢任何帮助!

我认为只需输入一个可笑的数字即可。如果你想获取其他专辑的数据,我也对你的脚本做了一些自动化处理

from urllib.parse import urlsplit
import json

import requests
from bs4 import BeautifulSoup

# build the post link
get_link="https://pitp.bandcamp.com/album/fragments-distancing"
link=urlsplit(get_link)
base_link=f'{link.scheme}://{link.netloc}'
post_link=f"{base_link}/api/tralbumcollectors/2/thumbs"

with requests.session() as s:
    res = s.get(get_link)
    soup = BeautifulSoup(res.text, 'lxml')

    # the data for tralbum_type and tralbum_id
    # are stored in a script attribute
    key="data-band-follow-info"
    data=soup.select_one(f'script[{key}]')[key]
    data=json.loads(data)
    open_more = {
        "tralbum_type":data["tralbum_type"],
        "tralbum_id":data["tralbum_id"],
        "count":1000}
        
    r=s.post(post_link, json=open_more).json()
    print(r['more_available']) # if not false put a bigger count