从网页抓取视频(C#和运行异步任务的新手。我正在尝试从网站上抓取一些音乐专辑信息)

优采云 发布时间: 2021-12-09 09:01

  从网页抓取视频(C#和运行异步任务的新手。我正在尝试从网站上抓取一些音乐专辑信息)

  C# 新手和运行异步任务。

  我正在尝试从 网站 获取一些音乐专辑信息。网络搜索将生成纯文本格式的 JSON 对象,但我似乎无法访问任何 DOM 信息。这是我尝试过的方法(使用 HtmlAgilityPack):

  using HtmlAgilityPack;

using System;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace WindowsFormsApp1 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent();

}

public async Task AlbumScraper(string albumname) {

HtmlWeb web = new HtmlWeb();

string albumurl = Uri.EscapeUriString("https://www.metal-archives.com/search/ajax-album-search/?field=title&query=" + albumname);

Console.Write(albumurl);

var albumdoc = await Task.Factory.StartNew(() => web.Load(albumurl));

string albumjson = "";

if (albumdoc.DocumentNode != null) {

albumjson = albumdoc.DocumentNode.InnerText;

}

return albumjson;

}

private async void Form1_Load(object sender, EventArgs e) {

string rawtext = await AlbumScraper("rust+in+peace");

Console.Write(rawtext);

}

}

}

  如何获取生成的JSON文本?加载“albumurl”网址时,我可以清楚地看到它。

  最佳答案

  首先,您不需要 HtmlAgilityPack。

  其次,尝试:

  using Newtonsoft.Json.Linq;

string albumurl = Uri.EscapeUriString("https://www.metal-archives.com/search/ajax-album-search/?field=title&query=rust+in+peace");

string doc = "";

using (System.Net.WebClient client = new System.Net.WebClient()) // WebClient class inherits IDisposable

{

doc = client.DownloadString(albumurl);

}

  然后你可以反序列化它(@itikhomi)

  AlbumSearchResponse data = JsonConvert.DeserializeObject(doc);

  您也可以手动解析

  JObject json = JObject.Parse(doc);

string error= Convert.ToString(json["error"]);

. . .

string aaData= Convert.ToString(json["aaData"]);

JArray arr = JArray.Parse(aaData);

foreach(JToken token in arr)

{

string[] strarr = token.ToObject();

}

  关于c#-使用C#从网页中抓取JSON,我们在Stack Overflow上发现了一个类似的问题:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线