私はウェブサイトを削っています。他のプロジェクトでこれを達成しましたが、この権利を得ることはできません。それは2日以上働いていて、何かが足りなくなっているかもしれません。誰かが私のコードを見ることができますか?ここでは、次のとおりです。ウェブサイトをスクラップする
using System;
using System.Collections.Generic;
using HtmlAgilityPack;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.Xml.Linq;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
List<string> names = new List<string>();
List<string> address = new List<string>();
List<string> number = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
string url = "http://www.scoot.co.uk/find/" + "cafe" + " " + "-in-uk?page=" + "4";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
List<List<string>> mainList = new List<List<string>>();
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
names.Add(Regex.Replace(node.ChildNodes[0].InnerHtml, @"\s{2,}", " "));
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//p[@class='result-address']"))
{
address.Add(Regex.Replace(node.ChildNodes[0].InnerHtml, @"\s{2,}", " "));
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//p[@class='result-number']"))
{
number.Add(Regex.Replace(node.ChildNodes[0].InnerHtml, @"\s{2,}", " "));
}
XDocument doccy = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XComment("Business For Sale"),
new XElement("Data",
from data in mainList
select new XElement("data", new XAttribute("data", "data"),
new XElement("Name : ", names[0]),
new XElement("Add : ", address[0]),
new XElement("Number : ", number[0])
)
)
);
var xml = doccy.ToString();
Response.ContentType = "text/xml"; //Must be 'text/xml'
Response.ContentEncoding = System.Text.Encoding.UTF8; //We'd like UTF-8
doccy.Save(Response.Output); //Save to the text-writer
}
}
ウェブサイトのリストの事業名、電話番号や住所、それらはすべて、クラス名によって定義されます(その結果、アドレス、結果-番号など)。私は明日のプレゼンテーションのために4ページの各リストからビジネス名、住所、電話番号を得ることができるようにXML出力を得ようとしていますが、それはまったく動作しません!
結果は各ループの3つすべてに含まれていますが、xmlに出力されないため、範囲外のエラーが発生します。
これは4つのループのすべてでリストを取得していますが、xmlobjectsにまとめると思います。私は個別のオブジェクトとして存在し、それらすべてを取得することができますが、私はそれを言うのは難しいいくつかのサンプルのhtmlなしで、それは名前、住所、PNUM 名、住所、PNUM などではなく、名 住所 PNUM –
する必要があります通常、各リスティングには共通の親要素があります。私は、共通の親要素を選択し、その上のforeachノードを行うことをお勧めします。次に、内部ノードを選択し、個別の値を1つずつ取得します。これにより、カスタムオブジェクトを定義し、XMLにシリアライズしやすいカスタムオブジェクトを作成することができます。本当に直接的な答えではありませんが、私は申し訳ありませんが、別のアプローチかもしれません。 –
HTMLページのURLは、コード全体にたくさん追加された理由です。 –