无访问令牌嵌入Instagram动态及Ins用户名爬虫代码失效求助
问题二:修复失效的Instagram内容抓取代码
你提供的旧代码失效的核心原因就是Instagram的页面结构大改:现在的主页内容都是动态渲染的,用file_get_contents拿到的静态HTML里根本没有用户的动态数据,更别说window._sharedData了。
如果实在不想用官方API(需要访问令牌),可以试试用无头浏览器模拟真实用户访问来获取动态渲染后的页面(注意:这种方法违反Instagram的服务条款,随时可能失效,风险自负)。给你一个PHP的示例思路(用chrome-php库):
require 'vendor/autoload.php'; use HeadlessChromium\BrowserFactory; function scrape_insta($username) { $browserFactory = new BrowserFactory(); // 启动无头浏览器 $browser = $browserFactory->createBrowser(); try { $page = $browser->createPage(); // 导航到用户主页,等待页面加载完成 $page->navigate("https://instagram.com/{$username}")->waitForNavigation(); // 等待帖子元素加载出来(根据当前Instagram的DOM结构调整选择器) $page->waitForSelector('article img'); // 获取完整的页面HTML(包含动态渲染的内容) $html = $page->getHtml(); // 尝试提取包含用户动态的JSON数据(Instagram的结构随时可能变,这个正则需要定期调整) preg_match('/window\.__additionalDataLoaded.*?({.*?});/', $html, $matches); if (!empty($matches[1])) { $data = json_decode($matches[1], true); // 提取用户的最新帖子列表 $latestPosts = $data['graphql']['user']['edge_owner_to_timeline_media']['edges']; return $latestPosts; } } finally { // 关闭浏览器 $browser->close(); } return []; }
不过真心建议你改用官方Instagram Graph API:虽然需要申请Facebook开发者账号、创建应用并获取访问令牌,但这是唯一合法且稳定的方案,不会有被封禁的风险,而且能拿到更规范的数据格式。
内容的提问来源于stack exchange,提问作者Darth Mikey D
相关产品推荐
相关产品推荐

