为什么Instagram通过浏览器和web应用的搜索结果有区别?

2021-11-29 23:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

当我通过浏览器在Instagram上搜索一些标签时,它会向如下服务器发送请求:

https://www.instagram.com/web/search/topsearch/?context=blended&query=#trump&rank_token=0.11476949782296608&include_reel=true

响应JSON包含100个类似的标签。你知道吗

当我从基于Flask的web应用程序发出这样的请求时,我只收到了55个类似的标签。我不明白为什么。你知道吗

我试着像浏览器那样写标题,但结果是一样的。 我发现了一些免费的服务,我可以测试GET查询,但结果是一样的。你知道吗

下面是用于进行查询的Flask函数:

def query():
    headers = {'authority': 'www.instagram.com',
            'method': 'GET',
            'scheme': 'https',
            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
            'cache-control': 'max-age=0',
            'cookie': 'rur=FTW; mid=XEXhXgAEAAFQ0Lg-pAfeVCCnUTzw; mcd=3; csrftoken=IeAstJqVSC7I3TYuKDoCxuGOI5kq4OL3',
            'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
            'x-compress': 'null',
            'x-requested-with': 'XMLHttpRequest'
        }
    payload = {'query': request.args.get('text')}
    baseUrl = 'https://www.instagram.com/web/search/topsearch/'

    try:
        response = requests.get(baseUrl, params=payload, headers=headers)
        response.raise_for_status()
    except requests.RequestException:
        return None

它工作得很好,但我希望有100个结果,而不是55个。你知道吗

如果你有什么想法,请告诉我。你知道吗

另外,这可能是因为会话参数吗?你知道吗