使用Instascrape爬取Instagram报url必须为字符串错误及空DataFrame问题
错误:InvalidArgumentException: invalid argument: 'url' must be a string
问题根因
- 第一处错误是Selenium驱动初始化逻辑不匹配:你代码中导入的是
Chrome类,初始化时却调用webdriver.Chrome,属于未正确导入模块导致的语法问题,会导致驱动初始化失败,连带后续爬取逻辑无法正常拿到接口返回值。 - 第二处错误是遍历对象错误:
scrape_posts方法返回的scraped才是成功完成爬取的帖子列表,你后续构造字典时遍历的是原始未爬取的posts列表,其中大量未完成数据填充的空对象的url属性为非字符串的None值,传入处理逻辑就会触发参数校验报错,同时空对象构造的DataFrame自然为空。 - 第三处是偶现的反爬拦截:Instagram的反爬机制会随机拦截未登录/特征异常的请求,此时拿到的帖子对象属性为空,也会触发同类型报错。
修复方案
- 修正Selenium驱动初始化的写法
- 遍历爬取成功的
scraped列表构造数据集,同时增加非空校验过滤无效对象 - 可适当延长爬取间隔降低被反爬拦截的概率
修正后完整代码
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
相关产品推荐
相关产品推荐

