문제

나는 당신의 캐릭터 통계와 와우 무기고에서 자동으로 당신의 캐릭터를 얻는 프로그램을 진행하고 있습니다. 이미 HTML이 있고 문자열이 어디에 있는지 식별 할 수 있지만 "this.effication"값을 가져와야합니다.이 경우에는 594입니다. 특정 입장을 취하십시오. 어떤 도움이든 큰 감사를 표할 것입니다.

감사

Matt -------- 이것은 HTML 스 니펫입니다.

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

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


도움이 되었습니까?

해결책

정규 표현식을 사용하여 수행 할 수 있습니다.

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...
        }
    }
}

다른 팁

웹 사이트의 XML 버전에서 정보를 추출하는 것이 훨씬 쉽습니다.

이와 같은 URL에 요청하는 경우 (유효한 문자 이름 만있는 경우에만) XML 문서를 되돌려 XML 파서를 사용하여 데이터를 쉽게 추출 할 수 있습니다.

http://eu.wowarmory.com/character-sheet.xml?r=nordrassil&cn=someone

URL은 웹 브라우저에 표시된 URL과 동일합니다.

그래도 주목하십시오 사용자 에이전트를 설정해야합니다 요청의 필드는 파일의 XML 버전을 지원하거나 대신 HTML을 다시 얻는 지원되는 브라우저의 필드가되도록합니다. 나는 프로그램의 사용자 에이전트로 "Mozilla/5.0 Firefox/2.0.0.1"을 사용하고 잘 작동합니다.

오, 또한 두 번째로 몇 번의 요청을하지 않거나 3 ~ 4 초마다 평균 한 명 이상의 요청을하거나 사이트가 몇 시간 동안 IP를 차단합니다 ...

한 가지 방법은 정규 표현식을 사용하여 HTML 소스 에서이 값을 추출하는 것입니다.

this.effective="(\d+)"

HTML 스크래핑은 이상적인 솔루션이 아닙니다 (예 : HTML의 형식이 변경 될 때 중단 될 수 있음) 그러나 "와우 무기고"와이 정보를 얻는 다른 방법에 대해 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top