python - 使用 selenium 抓取 Instagram 关注者
问题描述
我一直试图从我的一个大约 50k 的业务页面中删除所有关注者。我使用 Selenium 网络驱动程序和 Python 来报废。
我能够获得关注者对话框,并且可以滚动该对话框以加载更多关注者。但是,随着更多关注者被加载到对话框中,滚动速度不断降低。
这种技术可以奏效,但需要几天时间。这也要求机器一直处于活动状态而不是睡眠,否则进程将停止。而且,在大多数情况下,它会在 3k 到 4k 的追随者抓取后给出错误。
我想知道我的脚本和抓取追随者的方式是否有任何问题,或者这很常见。而且,如果有一种有效的方法可以做到这一点?
followers_dialoge = driver.find_element_by_xpath("/html/body/div[3]/div[1]/div/div[2]")
n = 1
for i in range(int(allfoll / n)):
next_length = len(driver.find_elements_by_class_name('FPmhX'))
if next_length != prev_length:
new_followers = driver.find_elements_by_class_name('FPmhX')[-12:]
with open(followers_dir, "a") as followers_file:
for element in new_followers:
if element.get_property('href'):
title = element.get_property('title')
href = element.get_property('href')
followers_file.write(title + "," + href + "," + "\n")
在滚动过程中,每次在对话框中加载 12 个关注者,所以在第 5 行,我得到新的 12 个关注者并保存它们。我知道我可以等待完整的对话框加载,我可以保存所有 50k 一次,但由于它很容易在几分钟/几小时后停止,这就是我在此过程中尝试保存它们的原因。(这可能是速度慢的原因之一)
解决方案
您需要使用 query_hash 和 end_cursor 值来查询下一个关注者列表。打开 Firefox,点击用户的关注者列表,点击检查元素,切换到网络选项卡并按 XHR 过滤并开始向下滚动,您将看到 Instagram 发出获取下一个关注者列表的请求。该线程有助于入门:https ://stackoverflow.com/a/50058700/1890619
推荐阅读
- sql - 一个查询中的多个 SUM 与多个 where
- python - 如何在 Python 数据框中重复单个值与其他列一样多次?
- go - 恐慌:同步:对同一端点的多个请求的负 WaitGroup 计数器
- python - 使用现有 CNN 模块的 Pytorch 自定义模块
- python - 在 Python pig latin 翻译器中保持首字母大写
- python - 如何在运行命令时让加载 gif 工作
- java - 两个 bean 专门化同一个托管 bean 是什么意思
- java - 是否存在 AWS Lambda 函数可以接收的通用事件,然后确定它是哪种类型的事件?
- azure-aks - 禁止 AKS AAD Pod 身份投掷 (403)
- python - 用于循环的慢速 Web 抓取 - Python