Pobranie numerów IP i portów, zawartych w znacznikach <span>

0

Witam.
W jaki sposób można pobrać IP i porty ze strony http://hidemyass.com/proxy-list/ ?
tam każda cyferka jest w osobnym <span>, jak to można pobrać ?

0

A jak sądzisz po kiego tak zrobili?

0

Poza tym, że są powciskane niewidoczne na stronie liczby pomiędzy poszczególne części adresu. Radzę odpuścić sobie tą stronę, bo mogą utrudnienia w parsowaniu z czasem nawarstwiać

0
Sarrus napisał(a):

Poza tym, że są powciskane niewidoczne na stronie liczby pomiędzy poszczególne części adresu. Radzę odpuścić sobie tą stronę, bo mogą utrudnienia w parsowaniu z czasem nawarstwiać

a z tej strony byloby latwiej ?
http://free-proxy-list.net/

0

No pewnie że łatwiej - całe adresy IP i numery portów są zapisane w poszczególnych komórkach tabeli; Łatwiej nie oznacza łatwo, bo i tak trzeba wiedzieć jak parsować źródło strony i wyłuskać odpowiednie dane;

Poza tym nie napisałeś czym chcesz przetwarzać źródło strony, więc podaj jakiś język/technologię.

0

Na obu stronach to do zrobienia tylko na pierwszej więcej zabawy bo parsując IP trzeba brać pod uwagę tylko liczby pomiędzy tagami mającymi style="display:inline" lub jedną z 3 nazw klas określonych w style (wyżej) .nazwa_losowa{display:inline}.

0

język w którym chce pisać to VB, lecz nie wiem jak to wyciągnąć z tabeli =/

0
        Dim sHTML As String = RichTextBox1.Text 'ja dla testu mam kod HTML w RichTextBox
        Dim myRegex As New Regex("<tr><td>([0-9\.]+)</td><td>([0-9]+)</td>")
        Dim myMatches As MatchCollection = myRegex.Matches(sHTML)
        For Each myMatch As Match In myMatches
            ListBox1.Items.Add(myMatch.Groups(1).Value & ":" & myMatch.Groups(2).Value) 'Groups(1) to IP Groups(2) to Port
        Next

EDIT Gdybyś nie wiedział trzeba Imports System.Text.RegularExpressions

3

Zapomniałem o portach :D. Ale niech to będzie zadanie domowe, najciekawszą część zrobiłem za ciebie. No i nie w jakiś Visual Basicach ;). Wymaga HtmlAgilityPack.

IEnumerable<string> GetProxies(string source)
{
    var document = new HtmlDocument();
    document.LoadHtml(source);

    return from row in document.DocumentNode.SelectNodes(@"//table[@id='listtable']/tr/td[2]/span")
            let classes = GetHideClasses(row.SelectSingleNode("./style").InnerText)
            let parts = from element in row.SelectNodes("./*[not(self::style)] | ./text()")
                        where IsElementVisible(element, classes)
                        select element.InnerText

            select string.Concat(parts);
}

bool IsElementVisible(HtmlNode node, IEnumerable<string> hideClasses)
{
    string style = node.GetAttributeValue("style", null);
    if (style != null && style.Contains("display:none"))
        return false;

    string @class = node.GetAttributeValue("class", null);
    if (@class != null && hideClasses.Contains(@class))
        return false;

    return true;
}

IEnumerable<string> GetHideClasses(string stylesheet)
{
    return Regex.Matches(stylesheet, @"\.(?<class>.+)\{display:none\}")
        .OfType<Match>()
        .Select(m => m.Groups["class"].Value);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1