HTMLアジリティパックを使用してサイトからデータをスクラップしようとしています。私は実際にforeach内でselectノードを使用してデータをリストまたは配列にエクスポートする方法を考え出すのに苦労しています。HTMLアジリティパックノードを選択
ここまでは私がこれまで取り組んでいるコードです。
string result = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http://www.amazon.com/gp/offer-listing/B002UYSHMM/);
request.Method = "GET";
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new StringReader(result));
HtmlNode root = doc.DocumentNode;
string itemdesc = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText; //this works perfectly to get the title of the item
//HtmlNodeCollection sellers = doc.DocumentNode.SelectNodes("//id['bucketnew']/div/table/tbody/tr/td/ul/a/img/@alt");//this does not work at all in getting the alt attribute from the seller images
HtmlNodeCollection prices = doc.DocumentNode.SelectNodes("//span[@class='price']"); //this works fine getting the prices
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='resultsset']/table/tbody[@class='result']/tr"); //this is the code I am working on to try to collect each tr in the result. I then want to eather add each span.price to a list from this and also add each alt attribute from the seller image to a list. Once I get this working I will want to use an if statement in the case that there is text for the seller name instead of an image.
List<string> sellers = new List<string>();
List<string> prices = new List<string>();
foreach (HtmlNode node in nodes)
{
HtmlNode seller = node.SelectSingleNode(".//img/@alt"); // I am not sure if this works
sellers.Add(seller.SelectSingleNode("img").Attributes["alt"]); //this definitly does not work and will not compile.
}
上記のコードには、動作しているものとできていないものと何ができているのかを示すコメントがあります。
誰もが素晴らしいだろう任意のsugguestionsや読書を持っている場合!私はフォーラムや例を探していて、私が使うことのできるものは何も出てこなかった。 「idは」要素の名前ではありませんので、コメントアウトSelectNodes
と