小编典典

从网页中提取数据,将其解析为特定片段,然后显示出来

c#

我已经使用该网站很长时间了,以查找我的问题的答案,但是我找不到这个问题的答案。

我正在与一个小组一起进行课堂项目。我们将建立一个小的“游戏交易”网站,允许人们注册,放入他们想要交易的游戏,并接受他人的交易或要求交易。

我们的网站早于正常运行,因此我们正在尝试向网站添加更多功能。我想做的一件事是将放置在Metacritic中的游戏链接起来。

这是我需要做的。我需要(在Visual Studio
2012中使用asp和c#)在metacritic上获得正确的游戏页面,提取其数据,将其解析为特定部分,然后在我们的页面上显示数据。

基本上,当您选择要交易的游戏时,我们希望显示一个小div,其中包含游戏的信息和等级。我想通过这种方式来学习更多信息,并从该项目中获得一些我不需要开始的东西。

我想知道是否有人可以告诉我从哪里开始。我不知道如何从页面中提取数据。我仍在尝试找出是否需要尝试编写一些内容来自动搜索游戏标题并以这种方式找到页面,或者是否可以找到某种直接进入游戏页面的方式。一旦获得数据,我便不知道如何从中获取所需的特定信息。

使得事情变得不那么容易的一件事是,我正在学习c ++和c#和asp,所以我一直都在忙。如果有人可以指出正确的方向,那将是很大的帮助。谢谢


阅读 448

收藏
2020-05-19

共1个答案

小编典典

这个小例子使用HtmlAgilityPack,并使用XPath选择器到达所需的元素。

protected void Page_Load(object sender, EventArgs e)
{
    string url = "http://www.metacritic.com/game/pc/halo-spartan-assault";
    var web = new HtmlAgilityPack.HtmlWeb();
    HtmlDocument doc = web.Load(url);

    string metascore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;
    string userscore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[2]/div[1]/div/div[2]/a/span[1]")[0].InnerText;
    string summary = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[2]/div[1]/ul/li/span[2]/span/span[1]")[0].InnerText;
}

获取XPath给定元素的简单方法是使用网络浏览器(我使用Chrome)开发者工具:

  • 打开开发人员工具(F12Ctrl+ Shift+ C(Windows)或Command+ Shift+ C适用于Mac)。
  • 在页面中选择您想要XPath的元素。
  • 右键单击“元素”选项卡中的元素。
  • 单击“复制为XPath”。

您可以将其完全粘贴到c#中(如我的代码所示),但是请确保转义引号。

您必须确保使用某些错误处理技术,因为如果Web Scrapping更改页面的HTML格式,则它们可能会导致错误。

编辑

根据@knocte的建议,以下是HTMLAgilityPack的Nuget包的链接:

https://www.nuget.org/packages/HtmlAgilityPack/

2020-05-19