0

最近、ウェブページのスクレイピングを「楽しんで」います。操作したい Web サイトには API がないため、仕方がなく、この方法で行う必要があります。

私が抱えている問題の 1 つは、HTML ツリーの要素 (つまり、タグ、内部テキストなど) を読み取ることです。HttpWebRequestおよびを使用して、サーバーにGET/POSTリクエストを送信しますHttpWebResponse

webResponseこの方法でHTMLソースコードを読むことができます:

StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
string sourceCode = sr.ReadToEnd();

私が必要とするのはvalue、このinputタグです:

<form action="/file.php" method="post">
    <input name="abc" id="abc" type="hidden" value="some_random_value" />
</form>

どうやってやるの?

4

2 に答える 2

2

これを行う 1 つの方法は、HTML パーサーを使用して HTML を解析し、次に XPath を使用して必要な要素を選択することです。

これは、HTML を含む文字列から関連するコードを正規表現しようとするよりもはるかにクリーンです。

http://htmlagilitypack.codeplex.com/

于 2012-09-23T18:30:23.277 に答える
1

I would use HtmlAgilityPack

string html = @"<form action=""/file.php"" method=""post"">
                <input name=""abc"" id=""abc"" type=""hidden"" value=""some_random_value"" />
                </form>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

//Xpath
var value1 = doc.DocumentNode.SelectSingleNode("//input[@id='abc']")
                             .Attributes["value"].Value;

//Linq
var value2 = doc.DocumentNode.Descendants("input")
                .First(i => i.Attributes["id"] != null && 
                            i.Attributes["id"].Value == "abc")
                .Attributes["value"].Value;
于 2012-09-23T19:34:25.680 に答える