如何解决使用 Jsoup 抓取 Instagram 公共视频和照片时出错
我想从 instagram 获取图像、标题、句柄名称、视频/图像链接。使用 jsoup 抓取。 我正在使用 Jsoup 库在 android 中抓取 Instagram 公共内容。但有时它有效,有时则不起作用。 我写了一个方法,它接受 instagram url 并返回一个包含标题、标题、图像/视频等的地图。 我想开发一个 instgram 内容下载器。
fun getMediaUrl(url: String): HashMap<String,String> {
val data = hashMapOf<String,String>()
val userAgent =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/65.0.3325.181 Safari/537.36"
val page = Jsoup.connect(url).userAgent(userAgent).get()
var username = ""
if (url.contains("instagram.com/p/")) {
username = page.toString()
.substringBefore("\",\"blocked_by_viewer\"")
.substringAfter("\"username\":\"")
var temp = ""
while (username != "" && temp != username) {
temp = username
username = username
.substringBefore("\",\"blocked_by_viewer\"")
.substringAfter("\"username\":\"")
}
} else if (url.contains("instagram.com/reel/")) {
username = page.toString()
.substringAfter("@type\":\"ProfilePage\",\"@id\":\"https:\\/\\/www.instagram.com\\/")
.substringBefore("\\/\"")
}
val title = page.select("meta[property=og:title]").first().attr("content")
val thumbnail = page.select("meta[property=og:image]").first().attr("content")
val st = title.split(" on Instagram: ")
var caption = ""
caption = if (st.size > 1) {
st[1]
} else {
""
}
var hashtags = ""
for (element in page.select("meta[property=video:tag]")) {
hashtags += " #${element.attr("content")}"
}
val shareUrl = page.select("link[rel=alternate]").first().attr("href")
when (page.select("meta[property=og:type]").first().attr("content")) {
"instapp:video" -> {
data["mediaUrl"] =
page.select("meta[property=og:video]").first().attr("content")
data["isVideo"] = "true"
}
"instapp:photo" -> {
data["mediaUrl"] =
page.select("meta[property=og:image]").first().attr("content")
data["isVideo"] = "false"
}
"video" -> {
data["mediaUrl"] =
page.select("meta[property=og:video]").first().attr("content")
data["isVideo"] = "true"
}
"photo" -> {
data["mediaUrl"] =
page.select("meta[property=og:image]").first().attr("content")
data["isVideo"] = "false"
}
"image" -> {
data["mediaUrl"] =
page.select("meta[property=og:image]").first().attr("content")
data["isVideo"] = "false"
}
else ->
data["mediaUrl"] = ""
}
data["caption"] = caption
data["hashtag"] = hashtags
data["shareUrl"] = shareUrl
data["handle"] = username
data["thumbnail"] = thumbnail
return data
}
但它给出了错误。请帮帮我。
java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.attr(java.lang.String)” 在 com.app.myinsta.viewmodels.HomeViewModel.getMediaUrl(HomeViewModel.kt:69) 在 com.app.myinsta.views.Home$validateUrl$1$1.invokeSuspend(Home.kt:196)
解决方法
抓取 Instagram 很难。你想匿名刮吗?这可能适用于住宅网络(家庭互联网),但工作非常不可靠,并且对于少量请求。你可能有 302 重定向到登录页面。如果您是应用程序/前端开发人员,您可能会考虑使用 https://rapidapi.com/restyler/api/instagram40
之类的 API版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。