c# - Js后用C#从网站获取信息
问题描述
所以我正在做一个有趣的项目,并记住我是一个初学者,我想获取从这个广播频道播放的歌曲的信息:
ilikeradio(对不起,该网站是瑞典语)。
我只想简单地把它放在一个textBox
.
我努力了:
WebClient web = new WebClient();
string htmlContent = new System.Net.WebClient().DownloadString(URL);
但这只是给了我源代码,而不是包含艺术家歌曲等列表项的代码。
感谢任何帮助请记住我是初学者。
解决方案
您提供的 URL 似乎返回 HTML,但是如果您将获得的 HTML 与在浏览器中呈现的 HTML 进行比较(通过右键单击网页并检查 HTML),您会发现您获得的实际上不同于最终渲染了什么。原因是该网站正在使用 Ajax 加载歌曲列表。换句话说,当您调用 时,您会在 javascript 运行和更新之前DownloadString()
从 web 服务中获取结果。
获得最终的 HTML 渲染结果并不容易。但你很幸运!
如果您访问该网站并在 Chrome 中打开调试工具并单击Network
选项卡。接下来,对所有请求进行排序Method
,GET
请求应该在顶部。在这些 GET 请求中,您正在寻找一个:
此 URL 返回 Web 服务器最终加载并呈现给您的 JSON,以便您将其视为“歌曲列表”。
返回的 JSON 是包含一些元数据的歌曲列表。您将需要解析此 JSON 以在您自己的网页中提取和显示歌曲列表。我怀疑您可以查看该网站的源代码并找到 Javascript 来执行此操作;)
Newtonsoft JSONConvert是解析 JSON 的最佳库。
如果要查看带有歌曲列表的 JSON,请复制上面的 URL 并将其粘贴到浏览器地址栏中(然后按 Enter)。接下来,复制 JSON 结果,然后打开这个. 将 JSON 粘贴到Text
选项卡中,然后单击Viewer
选项卡。您会注意到第一个元素是Current Song
,而其他元素在歌曲列表中。另请注意,每个元素都有一个名为 的子元素song
,其中包含标题。
为了让你继续,试试这个:
using System;
using System.Net;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
WebClient web = new WebClient();
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString("https://unison.mtgradio.se/api/v2/timeline?channel_id=6&client_id=6690709&to=2018-10-02T08%3A00%3A50&from=2018-10-02T07%3A00%3A50&limit=40");
dynamic stuff = JArray.Parse(json);
string name = stuff[1].song.title;
Console.WriteLine(name);
}
}
}
笔记
当您尝试此操作时,您会注意到打印到控制台的歌曲名称在网页列表中不存在。这是因为如果您查看我在上面发布的 JSON URL,就会发现查询参数...其中之一是日期和时间。您需要相应地修改 URL 以获得最新的(现在显示在网站上)播放列表。
推荐阅读
- java - Does the ZGC garbage collector support string deduplication?
- umbraco - 更新到最新版本 Umbraco 7 后生成的模型属性类型更改
- android - flutter android emulator 连接服务协议报错:无法连接到http://127.0.0.1:56237/5LMSAYhIdSY=/
- rust - 编译为 Wasm 时,指向堆分配内存的 Rust 指针可以为 0 吗?
- flutter - Flutter streamBuilder initalData 未按预期工作
- laravel - 在 Laravel 模型中访问 Auth 或 Request
- netlogo - 如何有效地创建所有代理都拥有的一个变量的数据
- javascript - 如何使用 xml 或 Javascript 在 SAP-ui5 中创建水平滚动条
- node.js - 在猫鼬中调用 document.save() 函数后,如何取回更新的文档?
- r - 使用 ggplot 和 ggplotly 进行多面绘图时出现在绘图之外的字母