Regex Telefone Brasileiro

Fala pessoal, tranquilo? Eu tô fazendo um crawler e ta ficando bem legalzinho, ta pegando bem as urls e tal…

O problema é no Regex de telefone, que ele pega varios números aleatórios:

Mas também pega bem os telefones:

Regex:

\(?\d{2,}\)?[ -]?\d{4,}[\-\s]?\d{4}

Código:

String phone_regex = "\\(?\\d{2,}\\)?[ -]?\\d{4,}[\\-\\s]?\\d{4}";
Pattern patternPhone = Pattern.compile(phone_regex);
....
String phoneTxt = doc.text(); //pego o texto da pagina
Matcher matcherPhone = patternPhone.matcher(phoneTxt); //vejo se algo bate com o meu regex
while (matcherPhone.find()) {
    if (!listOfPhone.contains(matcherPhone.group())) { //se achar algo igual adiciona no list e no array
        listOfPhone.add(matcherPhone.group());

        String[] itemsArray = new String[listOfPhone.size()];
        itemsArray = listOfPhone.toArray(itemsArray);

        crawler.setTelefones(itemsArray);

        phone_txtArea.append(matcherPhone.group() + "; ");
    }
}

Alguém conhece algum que funcione legal?
(já procurei em varios sites, o problema é que alguns não reconhecem quando tem a separação de telefones com / ou - e até mesmo quebra de linha…)

Vlw pessoal

Não sei qual ferramenta está usado, mas pra ferramentas que suportam executar js bastaria pegar pela class:

document.querySelector(".phoneNumber").innerText
1 curtida

Opa! To usando JSoup - JavaSwing.

Elements elementPhone = doc.select(".phoneNumber"); // direct a after h3
for (Element phones : elementPhone) {
    System.out.println(phones);
}

Mas assim ele acaba não pegando, acredito que nem todos os sites tem o elemento .phoneNumber, ele nem acha:

Achei que só queria pegar desse site tripadvisor. Pra vários aleatórios não sei. Se fossem sites fixos criaria uma tabela pra mapear o selector x url.

1 curtida

Ahhhh, beleza, valeu mesmo assim!

Bom, Eu não analisei essa pagina com inspeção.

Mas nem sempre o que é obtido com jsoup é o que de fato a pagina vai exibir.
Porque a pagina pode ter rotinas que alteram o conteudo dinamicamente atraves de javascript
ou similar.

Então nesse caso o mais seguro é fazer a chamada raspagem na pagina de exibição.

No JavaFX Eu uso WebView com WebEngine chamando Javascript, em Swing como é o seu caso pode tentar as ferramentas do JxBrowser, no passado Eu usava JDIC.

1 curtida