0

我正在开发一个程序,该程序将自动从哇军械库中获取您的角色统计信息和诸如此类的东西。我已经有了 html,我可以识别字符串的位置,但我需要获取“this.effective”值,在本例中为 594。但由于它总是在变化(其他值也是如此,我不能只是把它放在某个位置。任何帮助将不胜感激。

谢谢

马特 --------- 这是 html 片段:

    function strengthObject() {
        this.base="168";
        this.effective="594";
        this.block="29";
        this.attack="1168";

this.diff=this.effective - this.base;


4

3 回答 3

1

从网站的 XML 版本中提取信息要容易得多。

如果您向这样的 URL 发出请求(仅使用有效的字符名称),那么您将返回一个 XML 文档,您可以使用 XML 解析器轻松提取数据。

http://eu.wowarmory.com/character-sheet.xml?r=Nordrassil&cn=有人

这些 URL 与您在 Web 浏览器中看到的相同。

请注意,您必须将请求的 User Agent 字段设置为支持该文件的 XML 版本的受支持浏览器的字段,否则您将返回 HTML。我在我的程序中使用“Mozilla/5.0 Firefox/2.0.0.1”作为用户代理,它工作正常。

哦,也不要在一秒钟内发出超过几个请求,或者平均每 3 或 4 秒发出超过一个请求,否则该站点会阻止您的 IP 几个小时......

于 2010-01-04T14:34:43.177 回答
1

您可以使用正则表达式来做到这一点:

using System;
using System.Text.RegularExpressions;

class Program
{
    public static void Main()
    {
        string html = @"        function strengthObject() {
                this.base=""168"";
                this.effective=""594"";
                this.block=""29"";
                this.attack=""1168"";";

        string regex = @"this.effective=""(\d+)""";

        Match match = Regex.Match(html, regex);
        if (match.Success)
        {
            int effective = int.Parse(match.Groups[1].Value);
            Console.WriteLine("Effective = " + effective);
            // etc..
        }
        else
        {
            // Handle failure...
        }
    }
}
于 2009-11-29T17:47:08.353 回答
0

一种方法是使用正则表达式从 HTML 源中提取此值:

this.effective="(\d+)"

请注意,HTML 抓取不是一个理想的解决方案(例如,当 HTML 的格式发生变化时它可能会中断)但是我不知道“哇军械库”以及获取此信息的其他方法。

于 2009-11-29T17:47:02.210 回答