无法使用请求从网页中获取所有链接

rob*_*txt 7 python beautifulsoup web-scraping python-3.x python-re

我正在尝试获取连接到此网页中每个图像的所有链接。

如果让 selenium 脚本向下滚动直到到达底部,我可以获得所有链接。我希望抓取的一个这样的链接就是这个

现在,我的目标是使用请求解析所有这些链接。我注意到我想要解析的链接是使用这样的B-uPwZsJtnB短代码构建的。

但是,我试图shortcode在该网页的页面源中找到的脚本标记中抓取那些不同的可用内容。600 shortcodes在那个页面周围有。我已经创建了可以解析只有第一个脚本70这样shortcode最终可以建成70个限定链接。

如何使用请求获取所有 600 个链接?

到目前为止,我已经尝试过:

import re
import json
import requests

base_link = 'https://www.instagram.com/p/{}/'
lead_url = 'https://www.instagram.com/explore/tags/baltimorepizza/'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
    req = s.get(lead_url)
    script_tag = re.findall(r"window\._sharedData[^{]+(.*?);",req.text)[0]
    for item in json.loads(script_tag)['entry_data']['TagPage']:
        tag_items = item['graphql']['hashtag']['edge_hashtag_to_media']['edges']
        for elem in tag_items:
            profile_link = base_link.format(elem['node']['shortcode'])
            print(profile_link)
Run Code Online (Sandbox Code Playgroud)

BBl*_*ott 0

Instagram 网页使用延迟加载来加载图像。您可以通过两种方式克服这个问题:

  1. 使用评论中提到的Instagram API
  2. 使用像selenium这样的工具通过滚动到底部来加载页面上的所有图像,然后获取链接

第一种方法是更好的方法。