c# - 从网页中提取数据,针对特定部分进行解析并显示

标签 c# asp.net parsing web-crawler server-side

我已经使用这个网站很长时间来寻找我的问题的答案,但我无法在这个网站上找到答案。

我正在与一个小组合作完成一个类(class)项目。我们要建立一个小型“游戏交易”网站,允许人们注册、放入他们想要交易的游戏,并接受其他人的交易或请求交易。

我们的网站比预定的时间提前了很长时间,因此我们正在尝试向该网站添加更多内容。我自己想做的一件事是将已放入 Metacritic 的游戏链接起来。

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

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

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

让这一切变得不容易的事情之一是我正在学习 c++ 以及 c# 和 asp,所以我一直在纠结。如果有人能指出我正确的方向,那将是一个很大的帮助。谢谢

最佳答案

这个小例子使用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 抓取更改了页面的 HTML 格式,则可能会导致错误。

编辑

根据@knocte 的建议,这里是 HTMLAgilityPack 的 Nuget 包的链接:

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

关于c# - 从网页中提取数据,针对特定部分进行解析并显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065526/

相关文章:

c# - Stripe 异常 : No Such Plan

c# - 防止 XSS 或其他东西的正则表达式?

python - Lepl 中的 Token() 对象

c# - Thread.Interrupt 不工作

c# - 如何处理使 UI 无响应的同步(阻塞)调用

c# - MVC 后模型 - 集合属性没有元素

javascript - 如何在javascript中为下拉列表编写回发事件

c# - 带有javascript确认功能的必填字段验证器未验证

java - 从单个 DOM 元素获取原始 xml 代码

java - 从抽象语法树中获取控制流图