使用 Jsoup 获取 youtube href 链接
Using Jsoup to get youtube href links
我目前正在使用 Jsoup 尝试在执行搜索后获取 Youtube 视频的 videoID。我正在尝试从 href 获取视频 ID 并为此使用以下代码:
val doc = Jsoup.connect("https://www.youtube.com/results")
.data("search_query", s).get()
for (a in doc.select("a[href]")) {
Log.d("MAIN", a.attr("abs:href"))
}
但目前,结果看起来是这样的:
所以我认为 youtube 给了我一个基本的回应,因为我没有用户代理。所以我就这么做了。
我尝试在此基础上添加以下内容 previous Whosebug question
.ignoreContentType(true)
.userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
.referrer("http://www.google.com")
.timeout(12000)
.followRedirects(true)
.execute().parse()
它仍然给了我基本的反应。我想比较 Log.d("MAIN", doc.toString())
的结果,但元标记和随机数只有细微差别。由于某种原因,我没有获得文档的完整字符串版本,因此无法进行进一步比较。
youtube link 被搜索后如何获取? (我想得到一个 link 其中有“watch?v=XXXXXXX”)
如果可能的话,我想要 kotlin 语言的解决方案。
如果您查看原始 YouTube 响应 (doc
),您会发现它 returns 很多 js 代码(在 <script>
标签内)。此代码包含有关构建 HTML 的说明,您可以在浏览器中看到它。但是 Jsoup
is not a browser emulator - 它无法执行 javascript 代码,因此没有 a[href]
您要查找的元素。
您需要使用其他工具或解析 javascript。幸运的是,在这种情况下,简单的正则表达式就足够了:
val doc = Jsoup.connect("https://www.youtube.com/results").data("search_query", s).get()
val regex = "\"videoId\":\"(\w+)\"".toRegex()
val videoIds = doc.select("script")
.map { it.data() }
.filterNot { it.isEmpty() }
.flatMap { regex.findAll(it) }
.map { it.groupValues[1] }
.distinct()
我目前正在使用 Jsoup 尝试在执行搜索后获取 Youtube 视频的 videoID。我正在尝试从 href 获取视频 ID 并为此使用以下代码:
val doc = Jsoup.connect("https://www.youtube.com/results")
.data("search_query", s).get()
for (a in doc.select("a[href]")) {
Log.d("MAIN", a.attr("abs:href"))
}
但目前,结果看起来是这样的:
所以我认为 youtube 给了我一个基本的回应,因为我没有用户代理。所以我就这么做了。
我尝试在此基础上添加以下内容 previous Whosebug question
.ignoreContentType(true)
.userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
.referrer("http://www.google.com")
.timeout(12000)
.followRedirects(true)
.execute().parse()
它仍然给了我基本的反应。我想比较 Log.d("MAIN", doc.toString())
的结果,但元标记和随机数只有细微差别。由于某种原因,我没有获得文档的完整字符串版本,因此无法进行进一步比较。
youtube link 被搜索后如何获取? (我想得到一个 link 其中有“watch?v=XXXXXXX”) 如果可能的话,我想要 kotlin 语言的解决方案。
如果您查看原始 YouTube 响应 (doc
),您会发现它 returns 很多 js 代码(在 <script>
标签内)。此代码包含有关构建 HTML 的说明,您可以在浏览器中看到它。但是 Jsoup
is not a browser emulator - 它无法执行 javascript 代码,因此没有 a[href]
您要查找的元素。
您需要使用其他工具或解析 javascript。幸运的是,在这种情况下,简单的正则表达式就足够了:
val doc = Jsoup.connect("https://www.youtube.com/results").data("search_query", s).get()
val regex = "\"videoId\":\"(\w+)\"".toRegex()
val videoIds = doc.select("script")
.map { it.data() }
.filterNot { it.isEmpty() }
.flatMap { regex.findAll(it) }
.map { it.groupValues[1] }
.distinct()