문자열 c#에서 항상 변화하는 값을 얻으려면 어떻게해야합니까?
-
08-07-2019 - |
문제
나는 당신의 캐릭터 통계와 와우 무기고에서 자동으로 당신의 캐릭터를 얻는 프로그램을 진행하고 있습니다. 이미 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의 형식이 변경 될 때 중단 될 수 있음) 그러나 "와우 무기고"와이 정보를 얻는 다른 방법에 대해 잘 모르겠습니다.