Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 爬取 instagram 用户的关注列表

python 爬取 instagram 用户的关注列表

作者头像
伪君子
发布于 2019-12-15 11:11:03
发布于 2019-12-15 11:11:03
8.1K10
代码可运行
举报
文章被收录于专栏:伪君子的梦呓伪君子的梦呓
运行总次数:0
代码可运行

0 前言

这是很久之前我的房东找我帮忙爬 instagram 上面某个用户的关注列表,一开始我想着减低难度好给他使用,于是尝试了 webscraper,后羿采集器去爬取,结果吭哧吭哧花了两个多小时都没搞定。

于是我就直接写代码来爬取了,用 python 写个代码,半小时就好了?

1 分析过程

先访问用户主页,然后 F12 打开控制台,接着点击 Network,然后在下面选中 XHR。

用户主页

在页面中点击 正在关注,会出现下图中圈出的网络请求

XHR(XML Http Request)

点击第一个加载出来的请求,然后点击 Preview 查看一下加载的数据是否一致,是否一一对应。

username、followed_by_viewer、profile_pic_url 那些如果一一对应,那就是这个请求了,没找错。

数据

那么点击 Headers ,然后找到 Request Headers。

这里非常重要,Request Headers也就是请求头里面携带了重要的信息 cookie,要是没有 cooike 的话,那就爬取不了了。

代码中需要把请求头里面的信息加上才能爬取内容。

Request Headers

拉到最下面就是 Query String Parameters,请求的参数,query_hash 照着来就好,一般不会变。

variable 里面有个 id ,每个用户的 id 是不同的,所以要爬另一个用户关注的用户列表的话,需要进行替换。

Query String Parameters 双击这个请求,浏览器会新开一个标签页来访问这个链接。

链接 在谷歌扩展程序【JSONVIEW】的加持下,看到是内容是下图这样的;如果不加持的话,所有的文字都是挤在一起的。

简单分析一下, count 应该就是该用户关注了多少个人, has_next_page 就是有没有下一页,end_cursor 是查看下一页的关键,用来构造请求。

每一个 node 里面就是一个用户的信息。

数据

id 是用户的 id;username 是用户名,是 instagram.com/eltaautomotive 后面的那一个用来标识用户的字符串;full_name 应该类似微信昵称。

用户界面

2 代码思路

使用 requests 去构造请求,把请求头和参数加上,提取获取到的内容,has_next_page用来判断有没有下一页,end_cursor 用来构造下一个请求,id,username,full_name 是需要的内容,保存到 csv 里面。

3 代码 + 解释

首先是导入需要用到的包,这里只有 requests 是需要 pip install requests 进行安装的,别的都是 python 自带的包。

requests 是用来请求网站,获得数据的;json 是把获取到的 json 数据转化为 python 对象;csv 是用来把数据保存到 csv 里面;time 是用来 sleep 的,两个请求之间加上一点时间间隔。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import csv
import json
import requests
from time import sleep

先构造一个请求头,把需要的东西进行替换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cookie 是需要替换的,referer 最好是替换一下
headers = {
    'sec-ch-ua': 'Google Chrome 77',
    'sec-fetch-mode': 'cors',
    'dnt': '1',
    'x-ig-www-claim': 'hmac.AR1P1exDcpFRvpFAYKNm_Wnajygy1QK5l3HC7cN5943dNlY-',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'sec-fetch-dest': 'empty',
    'x-requested-with': 'XMLHttpRequest',
    'cookie': r'这里是cookie,需要自行替换',
    'x-csrftoken': '1vBpb3wLDDDbC63ckwu06IzIy351nB12',
    'x-ig-app-id': '936619743392459',
    'accept-encoding': 'gzip, deflate, br',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',
    'accept': '*/*',
    'referer': 'https://www.instagram.com/linda_ledo_carlights/following/',
    'authority': 'www.instagram.com',
    'sec-fetch-site': 'same-origin',
}

然后是 end_cursor ,这个是用来构造下一页的请求链接,一开始为空;has_next 是有没有下一页,用来循环获取列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
end_cursor = ''
has_next = True

下面这个就是一个循环,只有 has_next 不为 True 的时候才退出循环。

params 是请求所带的参数,每一页的参数都是不同的,通过不同的 end_cursor 来访问不同的页数。

然后用 requests 去获取到数据,获取到的数据用 json.loads() 把数据从 json 对象转为 python 对象。

接着从转化之后的数据中获取 has_next、end_cursor 并且赋值。

edges 是用户列表,获取之后遍历一下就能把每一个用户的id, username, full_name 的信息。

打开一个 csv 把爬取到的信息保存进去,关闭 csv,接着程序 sleep 23.3 秒之后判断是否进入 while 循环。(sleep的数值可以修改,但是建议不要低于 5)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while has_next:
    # id是需要替换的,每一个用户的 id 不一样
    params = (
        ('query_hash', 'd04b0a864b4b54837c0d870b0e77e076'),
        ('variables',
         '{"id":"5848320586","include_reel":true,"fetch_mutual":false,"first":12,"after":"' + end_cursor + '"}'),
    )

    response = requests.get('https://www.instagram.com/graphql/query/', headers=headers, params=params).text

    res = json.loads(response)
    has_next = res['data']['user']['edge_follow']['page_info']['has_next_page']
    print(has_next)
    end_cursor = res['data']['user']['edge_follow']['page_info']['end_cursor']
    edges = res['data']['user']['edge_follow']['edges']

    out = open("ig.csv", "a+", newline="", encoding="utf-8-sig")
    csv_writer = csv.writer(out, dialect="excel")

    for i in edges:
        row = [i['node']['id'], i['node']['username'], i['node']['full_name']]
        csv_writer.writerow(row)

    out.close()
    sleep(23.3)

print("=============搞定收工==============")

把代码从头到尾复制下来,替换一下需要替换的部分,运行之后就能在代码的同级目录下看到一个 ig.csv 的文件,打开之后就能看到数据了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪君子的梦呓 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
大哥现在找不到Query String Parameters这个选项了,也没找到自己账户的query_hash以及variable ID了。代码还是能正常跑的,但是拿不到自己的数据爬出来是你的数据
大哥现在找不到Query String Parameters这个选项了,也没找到自己账户的query_hash以及variable ID了。代码还是能正常跑的,但是拿不到自己的数据爬出来是你的数据
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【爬虫实战】用Python采集任意小红书笔记下的评论,爬了10000多条,含二级评论!
我们继续分享Python爬虫的案例,今天爬取小红书上指定笔记("巴勒斯坦"相关笔记)下的评论数据。
马哥python说
2024/01/22
10.5K4
【爬虫实战】用Python采集任意小红书笔记下的评论,爬了10000多条,含二级评论!
Python爬虫爬取Instagram博主照片视频
前言 Instagram上有很多非常好看的照片,而且照片类型非常全,照片质量也很高。 但是有个问题,不管是在移动端还是在网页端都不能通过长按或者右键方式进行图片保存。 看了下知乎问题 怎
林清猫耳
2018/08/31
5.1K1
Python爬虫爬取Instagram博主照片视频
Python爬取知乎评论:多线程与异步爬虫的性能优化
1. 知乎评论爬取的技术挑战 知乎的评论数据通常采用动态加载(Ajax),这意味着直接使用requests+BeautifulSoup无法获取完整数据。此外,知乎还设置了反爬机制,包括: ●请求头(Headers)验证(如User-Agent、Referer) ●Cookie/Session 校验(未登录用户只能获取部分数据) ●频率限制(频繁请求可能导致IP被封) 因此,我们需要: 1模拟浏览器请求(携带Headers和Cookies) 2解析动态API接口(而非静态HTML) 3优化爬取速度(多线程/异步)
小白学大数据
2025/07/08
1280
手把手教你爬取Instagram博主照片和视频
原文:https://www.jianshu.com/p/b2e077c07c70
Python数据科学
2018/09/14
26.3K0
手把手教你爬取Instagram博主照片和视频
用python制作一款爬虫软件,爬取公众号文章信息,爬虫之路,永无止境!!!(附源码)
用python制作一款爬虫软件,爬取公众号文章信息,爬虫之路,永无止境!!!(附源码)
Java架构师必看
2021/07/19
1.9K1
用python制作一款爬虫软件,爬取公众号文章信息,爬虫之路,永无止境!!!(附源码)
Python——如何优雅的爬取公众号信息
最近两个周业余时间在赶的一个项目,因为精力有限所以进展缓慢,索性就先把接近完善的这部分代码,先分享出来吧。
Ed_Frey
2019/09/16
3K0
Python——如何优雅的爬取公众号信息
爆款小红书笔记采集神器!Python开发,正文一键爬取
小红书是国内集社交、分享、购物于一体的综合性平台,为用户提供了一个交流经验、获取灵感和享受购物乐趣的沟通渠道,同时也是国内流量数一数二的生态网站。很多行业的操盘手需要获取热门笔记、热门作者的作品数据,从而提升自己账号的互动数据和价值。因此,我用python开发了一个爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。
马哥小迷弟132
2024/06/25
2.4K0
爆款小红书笔记采集神器!Python开发,正文一键爬取
Airbnb爬取某地区房源的所有评论
本文代码由python requests+json爬取ajax加载 爱彼迎深圳所有房源借鉴修改而成。
xuing
2019/10/19
1.8K0
Python 源代码 | 2024 版抖音评论采集爬虫
当时的重点只是讲 hook 这种方法,并不是采集抖音评论,有点为了这瓶醋包了这碗饺子的意思在里面。
月小水长
2024/01/12
6.2K7
Python 源代码 | 2024 版抖音评论采集爬虫
【爬虫软件】用python开发的快手评论批量采集工具:含二级评论
我开发了一款基于Python的快手评论采集软件,该软件能够自动抓取快手视频的评论数据,包括二级评论和展开评论。为便于不懂编程的用户使用,我提供了图形用户界面(GUI),用户无需安装Python环境或编写代码,只需双击即可运行。
马哥python说
2024/03/21
1.2K0
【爬虫软件】用python开发的快手评论批量采集工具:含二级评论
批量爬取淘宝数据
此代码主要批量爬取淘宝IPad搜索页的商品图片网址,商品名称,商品价格,购买人数,商品店铺,店铺地址等数据
码农GT038527
2024/11/15
3160
批量爬取淘宝数据
用Python开发的抖音评论区采集软件,批量爬取评论(含二级)
采集软件的主要目标是实现笔记数据的自动化采集,包括笔记正文、发布时间、以及转评赞藏等关键信息。通过设计直观的界面,旨在让即使是技术小白也能轻松使用这款工具。
马哥python说
2024/01/27
12.4K3
用Python开发的抖音评论区采集软件,批量爬取评论(含二级)
【爬虫+数据清洗+可视化分析】舆情分析"淄博烧烤"的B站评论
自从2023.3月以来,"淄博烧烤"现象持续占领热搜流量,体现了后疫情时代众多网友对人间烟火气的美好向往,本现象级事件存在一定的数据分析实践意义。
马哥python说
2024/04/06
6650
【爬虫+数据清洗+可视化分析】舆情分析"淄博烧烤"的B站评论
【爬虫实战】用python爬小红书任意话题的笔记,以#杭州亚运会#为例
最近的亚运会大家都看了吗。除了振奋人心,还主打一个爱憎分明(主要针对小日子和韩国),看了的小伙伴都懂得!
马哥python说
2024/03/20
4K0
【爬虫实战】用python爬小红书任意话题的笔记,以#杭州亚运会#为例
从零开始:用Python爬取懂车帝网站的汽车品牌和价格数据
场景:在一个现代化的办公室里,工程师小李和产品经理小张正在讨论如何获取懂车帝网站的汽车品牌和价格数据。
jackcode
2025/02/12
4510
从零开始:用Python爬取懂车帝网站的汽车品牌和价格数据
Python 不用selenium 带你高效爬取京东商品评论
一天,一朋友扔给我一个链接https://item.jd.com/100000499657.html,让我看看这个歌商品的所有评论怎么抓取,我打开一看,好家伙,竟然有近300万条评论,不是一个小数目啊。
cutercorley
2020/07/23
1.6K0
Python 不用selenium 带你高效爬取京东商品评论
新手向-爬取分析拉勾网招聘信息
然后在拉勾网搜索关键词 算法工程师 回车,然后点击下一页、下一页,此时开发者工具里的Network 下XHR(表示该网站是以Ajax方式获取刷新信息的)应当如下图(图中已标明了一些关键信息):
爱写bug
2019/07/05
6940
新手向-爬取分析拉勾网招聘信息
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。
jackcode
2024/02/29
6440
Python爬虫:爬取拉勾网职位并分析
本文从拉勾网爬取深圳市数据分析的职位信息,并以CSV格式保存至电脑,之后进行数据清洗,生成词云,进行描述统计和回归分析,最终得出结论。
数据科学社区
2018/07/30
1.7K0
Python爬虫:爬取拉勾网职位并分析
python爬虫系列之数据存储实战:爬取简书用户文章列表并保存
前面讲了 json和 csv两个存储数据的库,在数据量比较少的时候,用这两个库很方便。
渔父歌
2018/09/28
1.9K0
python爬虫系列之数据存储实战:爬取简书用户文章列表并保存
推荐阅读
相关推荐
【爬虫实战】用Python采集任意小红书笔记下的评论,爬了10000多条,含二级评论!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档