Разбор HTMLAgillityPack - PullRequest
       7

Разбор HTMLAgillityPack

0 голосов
/ 10 марта 2012

Я пытаюсь проанализировать следующие данные из документа HTML с помощью HTMLAgillityPack:

<a href="http://abilene.craigslist.org/">abilene</a> <br>
<a href="http://albany.craigslist.org/"><b>albany</b></a> <br>
<a href="http://amarillo.craigslist.org/">amarillo</a> <br>
...

Я бы хотел разобрать URL и название города в 2 отдельных файла.

Пример:

urls.txt
«http://abilene.craigslist.org/"
«http://albany.craigslist.org/"
«http://amarillo.craigslist.org/"

cities.txt
Абилина
Албани
Амарилло

Вот что у меня есть:

        public void ParseHtml()
    {
        //Clear text box 
        textBox1.Clear();

        //managed wrapper around the HTML Document Object Model (DOM). 
        HtmlAgilityPack.HtmlDocument hDoc = new HtmlAgilityPack.HtmlDocument();

        //Load file
        hDoc.Load(@"c:\AllCities.html"); 

        try
        {
            //Execute the input XPath query from text box
            foreach (HtmlNode hNode in hDoc.DocumentNode.SelectNodes(xpathText.Text))
                {
                    textBox1.Text += hNode.InnerHtml + "\r\n";
                }

        }
        catch (NullReferenceException nre)
        {
            textBox1.Text += "Can't process XPath query, modify it and try again.";
        }
    }

Любая помощь будет принята с благодарностью! Спасибо, ребята!

1 Ответ

1 голос
/ 11 марта 2012

Я понял, что вы хотите разобрать их с craigslist.org?
Вот как я это сделаю.

List<string> links = new List<string>();
List<string> names = new List<string>();
HtmlDocument doc = new HtmlDocument();
//Load the Html
doc.Load(new WebClient().OpenRead("http://geo.craigslist.org/iso/us"));
//Get all Links in the div with the ID = 'list' that have an href-Attribute
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//div[@id='list']/a[@href]");
//or if you have only the links already saved somewhere
//HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a[@href]");
if (linkNodes != null)
{
  foreach (HtmlNode link in linkNodes)
  {
    links.Add(link.GetAttributeValue("href", ""));
    names.Add(link.InnerText);//Get the InnerText so you don't get any Html-Tags
  }
}
//Write both lists to a File
File.WriteAllText("urls.txt", string.Join(Environment.NewLine, links.ToArray()));
File.WriteAllText("cities.txt", string.Join(Environment.NewLine, names.ToArray()));
...