You need to enable JavaScript to run this app. 使用Instascrape爬取Instagram报url必须为字符串错误及空DataFrame问题
优惠活动
大模型
产品
解决方案
定价
更多

使用Instascrape爬取Instagram报url必须为字符串错误及空DataFrame问题

错误:InvalidArgumentException: invalid argument: 'url' must be a string

问题根因

  • 第一处错误是Selenium驱动初始化逻辑不匹配:你代码中导入的是Chrome类,初始化时却调用webdriver.Chrome,属于未正确导入模块导致的语法问题,会导致驱动初始化失败,连带后续爬取逻辑无法正常拿到接口返回值。
  • 第二处错误是遍历对象错误:scrape_posts方法返回的scraped才是成功完成爬取的帖子列表,你后续构造字典时遍历的是原始未爬取的posts列表,其中大量未完成数据填充的空对象的url属性为非字符串的None值,传入处理逻辑就会触发参数校验报错,同时空对象构造的DataFrame自然为空。
  • 第三处是偶现的反爬拦截:Instagram的反爬机制会随机拦截未登录/特征异常的请求,此时拿到的帖子对象属性为空,也会触发同类型报错。

修复方案

  1. 修正Selenium驱动初始化的写法
  2. 遍历爬取成功的scraped列表构造数据集,同时增加非空校验过滤无效对象
  3. 可适当延长爬取间隔降低被反爬拦截的概率

修正后完整代码

import pandas as pd
from selenium import webdriver
from instascrape import Profile, scrape_posts
from webdriver_manager.chrome import ChromeDriverManager

# 修正驱动初始化逻辑
driver = webdriver.Chrome(ChromeDriverManager().install())

# 爬虫配置
SESSIONID = '你的实际session id'  
headers = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36 Edg/87.0.664.57",
            "cookie": f"sessionid={SESSIONID};"}
prof = Profile('https://www.instagram.com/目标用户名/') 
prof.scrape()

# 爬取帖子
posts = prof.get_posts(webdriver=driver, login_first=True)
scraped, unscraped = scrape_posts(posts, silent=False, headers=headers, pause=15) # 间隔调整为15秒降低反爬概率

# 仅遍历爬取成功的列表,增加属性校验过滤无效数据
posts_data = []
for post in scraped:
    post_dict = post.to_dict()
    # 过滤核心字段为空的无效数据
    if all(key in post_dict for key in ['upload_date', 'comments', 'likes']):
        posts_data.append(post_dict)

posts_df = pd.DataFrame(posts_data)
print(posts_df[['upload_date', 'comments', 'likes']])

内容的提问来源于stack exchange,提问作者gropdrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:06:04