使用 google 电子表格抓取 Instagram 数据?
Scraping Instagram data using google spreadsheet?
我需要使用 google 电子表格的 public Instagram 帐户中的简历和帖子数量等数据。我能够提取关注者和关注者的数量。你能帮忙吗?
这个公式看起来真的很复杂,但实际上就是这样 - 是一个 importxml 公式,用于从 "script" 部分提取数据,其中包含您想要的部分...然后使用一堆regexreplace/extract 函数我将数据清理成可读格式:
以这个public页面为例:http://www.instagram.com/salesforce/
然后在 B1 或 C1 中输入:
=iferror(arrayformula(regexreplace({arrayformula(regexextract(transpose(split(regexreplace(regexreplace(concatenate(IMPORTXML(Sheet2!A1,"//script")),"\n",""),"(^.*""ProfilePage"": \[{""user"": {""username"": "")(.*)(nodes.*)",""),", """,false)),"(^.*)"": .*")),arrayformula(regexextract(transpose(split(regexreplace(regexreplace(concatenate(IMPORTXML(Sheet2!A1,"//script")),"\n",""),"(^.*""ProfilePage"": \[{""user"": {""username"": "")(.*)(nodes.*)",""),", """,false)),"^.*"": (.*)"))},"[""}{]","")))
我最终使用了一个文字数组,这样我就可以有效地将字段名称从值中分离出来,显然你可以按照你真正想要的方式进行格式化,但是请看这里的图片,它展示了它提取的字段:
另请注意,关注者 followed_by 和媒体:计数是您提到的字段(例如,帖子的数量称为媒体计数),然后传记当然是不言自明的
更新:在回答你的评论时 - 如果你想得到其他 2 个值,你可以在单个 regexextract 函数中完成,如下所示:
如果您使用原始导入数据,这些正则表达式有效:
媒体数:
=REGEXEXTRACT(concatenate(IMPORTDATA(E1)),"""media: {""count"": (\d+)page_info: {")
简历:
=REGEXEXTRACT(concatenate(IMPORTDATA(E1)),"biography: ""(.*)""full_name")
如果您使用 importxml 方法这些工作:
=REGEXEXTRACT(A1,"biography"": ""(.*)"", "".*""media"": {""count"": (\d+), ""page_info""")
这会创建 2 个捕获组,自动将它们放入它们自己的相邻单元格中,或者您可以单独进行它们,即:
传记:
=REGEXEXTRACT(A1,"biography"": ""(.*)"", "".*""media")
媒体数:
=REGEXEXTRACT(A1,"media"": {""count"": (\d+), ""page_info""")
我需要使用 google 电子表格的 public Instagram 帐户中的简历和帖子数量等数据。我能够提取关注者和关注者的数量。你能帮忙吗?
这个公式看起来真的很复杂,但实际上就是这样 - 是一个 importxml 公式,用于从 "script" 部分提取数据,其中包含您想要的部分...然后使用一堆regexreplace/extract 函数我将数据清理成可读格式:
以这个public页面为例:http://www.instagram.com/salesforce/
然后在 B1 或 C1 中输入:
=iferror(arrayformula(regexreplace({arrayformula(regexextract(transpose(split(regexreplace(regexreplace(concatenate(IMPORTXML(Sheet2!A1,"//script")),"\n",""),"(^.*""ProfilePage"": \[{""user"": {""username"": "")(.*)(nodes.*)",""),", """,false)),"(^.*)"": .*")),arrayformula(regexextract(transpose(split(regexreplace(regexreplace(concatenate(IMPORTXML(Sheet2!A1,"//script")),"\n",""),"(^.*""ProfilePage"": \[{""user"": {""username"": "")(.*)(nodes.*)",""),", """,false)),"^.*"": (.*)"))},"[""}{]","")))
我最终使用了一个文字数组,这样我就可以有效地将字段名称从值中分离出来,显然你可以按照你真正想要的方式进行格式化,但是请看这里的图片,它展示了它提取的字段:
另请注意,关注者 followed_by 和媒体:计数是您提到的字段(例如,帖子的数量称为媒体计数),然后传记当然是不言自明的
更新:在回答你的评论时 - 如果你想得到其他 2 个值,你可以在单个 regexextract 函数中完成,如下所示:
如果您使用原始导入数据,这些正则表达式有效:
媒体数:
=REGEXEXTRACT(concatenate(IMPORTDATA(E1)),"""media: {""count"": (\d+)page_info: {")
简历:
=REGEXEXTRACT(concatenate(IMPORTDATA(E1)),"biography: ""(.*)""full_name")
如果您使用 importxml 方法这些工作:
=REGEXEXTRACT(A1,"biography"": ""(.*)"", "".*""media"": {""count"": (\d+), ""page_info""")
这会创建 2 个捕获组,自动将它们放入它们自己的相邻单元格中,或者您可以单独进行它们,即:
传记:
=REGEXEXTRACT(A1,"biography"": ""(.*)"", "".*""media")
媒体数:
=REGEXEXTRACT(A1,"media"": {""count"": (\d+), ""page_info""")