Regex Suche

Hab dir da mal etwas zusammengebaut :D

C#:
/// <summary>
/// Sucht Haendleradressen bei silit.de
/// </summary>
/// <license>MIT License (http://r15ch13.mit-license.org/)</license>
/// <param name="postleitzahl">Postleitzahl der Region in der nach Haendlern gesucht wird</param>
/// <param name="radius">Suchradius in Kilometern</param>
/// <param name="country">Laendercode (ISO 3166)</param>
/// <returns>Haendleradressen</returns>
public List<string> Silit(string postleitzahl, string radius = "50", string country = "DE")
{
    var adressen = new List<string>();
    string html;

    // Benutzereingabe an Silit.de senden und Ergebnis empfangen
    using (var wb = new WebClient())
    {
        var data = new NameValueCollection();
        data["wmf_store_locator[country]"] = country;
        data["wmf_store_locator[query]"] = postleitzahl;
        data["wmf_store_locator[radius]"] = radius;
        data["wmf_store_locator[find]"] = "Finden";
        data["wmf_store_locator[branches]"] = "1";
        data["wmf_store_locator[dealers]"] = "1";

        byte[] response = wb.UploadValues("http://www.silit.de/handel-outlets/", "POST", data);
        html = System.Text.Encoding.UTF8.GetString(response);
    }

    if (!String.IsNullOrEmpty(html))
    {
        // HTML Dokument laden
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);

        // Die Adressen finden
        var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"storelist\"]/*[@class=\"lft\"]");

        if (nodes != null)
        {
            foreach (HtmlNode adresse in nodes)
            {
                // Adresse bereinigen und in der Liste speichern
                adressen.Add(adresse.InnerText.Replace("\t", "").Trim());
            }
        }
    }
    return adressen;
}

/// <summary>
/// Sucht Haendleradressen bei gefu.com
/// </summary>
/// <license>MIT License (http://r15ch13.mit-license.org/)</license>
/// <param name="postleitzahl">Postleitzahl der Region in der nach Haendlern gesucht wird</param>
/// <returns>Haendleradressen</returns>
public List<string> Gefu(string postleitzahl)
{
    var adressen = new List<string>();
    string html;

    // Benutzereingabe an Silit.de senden und Ergebnis empfangen
    using (var wb = new WebClient())
    {
        var data = new NameValueCollection();
        data["tx_suppliersearch_pi1[sword]"] = postleitzahl;
        data["no_cache"] = "1";
        data["tx_suppliersearch_pi1[pointer]"] = "";

        byte[] response = wb.UploadValues("http://www.gefu.com/haendlersuche.html", "POST", data);
        html = System.Text.Encoding.UTF8.GetString(response);
    }

    if (!String.IsNullOrEmpty(html))
    {
        // HTML Dokument laden
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);

        // Die Adressen finden
        var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"tx-suppliersearch-pi1-listrow\"]/table/tr/td[2]");

        if (nodes != null)
        {
            foreach (HtmlNode adresse in nodes)
            {
                // Adresse bereinigen und in der Liste speichern
                adressen.Add(adresse.InnerText.Replace("\t", "").Replace("Zum Routenplaner", "").Trim());
            }
        }
    }
    return adressen;
}

/// <summary>
/// Sucht Haendleradressen bei kaiser-backform.com
/// </summary>
/// <license>MIT License (http://r15ch13.mit-license.org/)</license>
/// <param name="id">Id des Landes oder Kontinents</param>
/// <param name="land">Land oder Kontinent?</param>
/// <returns>Haendleradressen</returns>
public List<string> Kaiser(string id, bool land = false)
{
    var adressen = new List<string>();
    string html;

    // Benutzereingabe an Silit.de senden und Ergebnis empfangen
    using (var wb = new WebClient())
    {
        var url = "http://www.kaiser-backform.com/dealer-search-international_228.html";
        if (land)
        {
            url += "?LandID=" + id;
        }
        else
        {
            url += "?ContinentID=" + id;
        }
        html = wb.DownloadString(url);
    }

    if (!String.IsNullOrEmpty(html))
    {
        // HTML Dokument laden
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);

        // Die Adressen finden
        var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"searchResult\"]");

        if (nodes != null)
        {
            foreach (HtmlNode adresse in nodes)
            {
                // Adressedaten zusammen suchen
                var h1 = adresse.SelectSingleNode("./h1");
                var h2 = adresse.SelectSingleNode("./h2");
                var left = adresse.SelectSingleNode("./div/div[@class=\"leftElement\"]");
                var right = adresse.SelectNodes("./div/div[@class=\"rightElement\"]/span");

                string gesamteAdresse;
                string zusatz = "";

                foreach (var zusatzNode in right)
                {
                    if (zusatzNode.FirstChild.Name != "img")
                    {
                        if (zusatzNode.GetAttributeValue("class", "") == "type")
                        {
                            zusatz += zusatzNode.InnerText.Trim() + " ";
                        }
                        else
                        {
                            zusatz += zusatzNode.InnerText.Trim() + "\n";
                        }
                    }
                }

                // Adresse zusammensetzen
                if (!String.IsNullOrEmpty(h1.InnerText))
                {
                    gesamteAdresse = String.Format("Land: {0}\n{1}\n{2}\n\n{3}", h1.InnerText.Trim(), h2.InnerText.Trim(), left.InnerText.Trim(), zusatz.Replace("&nbsp;", " ").Trim());
                }
                else
                {
                    gesamteAdresse = String.Format("{0}\n{1}\n\n{2}", h2.InnerText.Trim(), left.InnerText.Trim(), zusatz.Replace("&nbsp;", " ").Trim());
                }

                adressen.Add(gesamteAdresse.Trim());
            }
        }
    }
    return adressen;
}
 
Wow, danke.

Habs mal eingebaut und es funktioniert wunderbar.
Muss mir den Code übers Wochenende aber mal genauer durchschauen, ich will es unbedingt verstehen.
Ich schreibe nun noch einen Excel Export für die Daten und dann habe ich denke ich was ich will.

Eventuell muss ich dir noch die eine oder andere Frage zum Code stellen, um auch wirklich alles verstehen zu können.
Auf jeden Fall vielen vielen Dank.

Ich melde mich dann nochmal.
 
Zurück
Oben