Pular para o conteúdo principal

Uso de expressões regulares

Informações gerais

No A-Parser, são aplicadas expressões regulares compatíveis com Perl/JavaScript, que podem ser utilizadas:

Documentação detalhada sobre expressões regulares pode ser encontrada nas seguintes fontes:

No A-Parser existe a possibilidade de processar qualquer resultado usando uma expressão regular; para isso, utiliza-se a opção Parse custom results (Usar regex):

Opção Utilizar regex

Particularidades de uso e flags

  • Expressões regulares são escritas sem delimitadores //
  • As seguintes flags são suportadas:
    • i - busca insensível a maiúsculas e minúsculas
    • s - o ponto inclui todos os caracteres, incluindo quebras de linha
    • g - busca global ou substituição

Além disso, é possível indicar uma flag na própria regex, por exemplo, buscar a palavra test em cada linha de todo o texto (ou do código da página, dependendo de onde a regex é aplicada) usando a flag m (multi line - os símbolos ^ e $ funcionam como início e fim da linha, respectivamente):

(?m)^(.+?test.+?)$

Extração de informações arbitrárias

Descrição do trabalho com expressões regulares no editor de tarefas

Com a ajuda da opção Parse custom results (Usar regex) ou do Construtor de resultados, é possível utilizar expressões regulares para extrair informações arbitrárias dos resultados da extração de dados, por exemplo, do código-fonte HTML das páginas ou de resultados já preparados

  • Em Parse result (On) (Aplicar a), seleciona-se o resultado do scraper; pode ser um resultado simples ou um array
  • A expressão regular é especificada sem delimitadores, seguida pela possibilidade de indicar uma flag
  • Em Result type (Tipo de resultado) é indicado o tipo do resultado - Flat (resultado simples) ou Array (array). Se como resultado de origem for escolhido um array ou se for usado o flag g da expressão regular, o resultado sempre será salvo em um array. No campo Name (Nome) é indicado o nome do array
  • Cada parêntese de captura da expressão regular pode ser salvo como um elemento separado; o nome do elemento é inserido no campo correspondente $1 to, $2 to... - onde o número indica a ordem do parêntese de captura
  • No campo RegEx (Regex), é possível usar o modelo, o que permite usar a consulta como parte da expressão regular

Os novos resultados criados podem ser usados na formatação de resultados, no construtor de resultados, na filtragem e desduplicação de resultados ou na próxima opção Parse custom results (Usar regex). Esta opção é semelhante ao construtor de resultados ao usar RegEx Match

Exemplo de extração de links de imagens do código HTML original

Para resolver esta tarefa, usamos o scraper Net::HTTPNet::HTTP para obter o código-fonte da página. Aplicamos a $data (página baixada) uma expressão regular com as flags isg, e salvamos o resultado nos elementos src do array images. No formato do resultado, indicamos para exibir todos os elementos src separados por quebra de linha.

Como resultado da extração de dados para a consulta http://a-parser.com/, obteremos a seguinte lista no arquivo de resultado:

/img/lang/en.png  
/img/lang/ru.png
img/[email protected]
https://files.a-parser.com/img/site/tour_ru/V1qpV.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_all_parsers_list.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_1_quick_task.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_2_task_editor_easy.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_3_task_editor_analyze_domains.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_4_task_editor_parse_emails.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_5_queue_fast_google.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_6_queue_spyserp.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_7_javascript_parser.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_8_scheduler.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_9_settings.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_10_proxies.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_11_templates.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_12_task_tester.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_13_parser_test.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_14_api.png
https://files.a-parser.com/img/site/tour_ru/tour_ru_15_resources.png
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/0/12.jpg?1507557563
data/avatars/s/13/13392.jpg?1570706020
data/avatars/s/16/16560.jpg?1586782475
data/avatars/s/1/1240.jpg?1537376153
styles/uix/xenforo/avatars/avatar_s.png
data/avatars/s/0/371.jpg?1412969226
styles/uix/xenforo/avatars/avatar_s.png
//mc.yandex.ru/watch/26891250
Baixar exemplo

Como importar um exemplo para o A-Parser


eJxtVN9v2jAQ/l8sJArqYH3YS7Stokhomxgwmj5BJlnkyLz612yHFUX533d2Egfa
vYDv7rvvvvNdXBFH7bPdGLDgLEl2FdHhTBKSw5GW3JFboqmxYHx4R1bgkuRLmm7Q
HxEVcWcNmHMorVNiC7ZJNM0BuaijwS7gBc2PTBS7n5+zsTWH/d6OP/mf3XBPspvJ
+H4UTh08bZiZLSJh66LG0DM6w/+KigATtAAbkV4zwSIkq3uR6gTGsBwQxXK0j8oI
6kwn+kR56WGDhmvShG+GgyBWDkekzrJYYBGiHq7vJu3dxeAjPUGqfAnGoXcv0Gr1
DvBmwEe7MqOJe/EMNM+ZY0pS3lTwnfRVnyT7E0RKhVg8GgZ2YZRAl4NA4J3nTt2O
DIJNkKIMuT+aHJIcKbdwSyxKXVAUkr+OMAeGOmXW2utBf0WUnHG+hBPwHhb4H0rG
c1yV2RGTvraJ/4es33DUsb3LUjisvwY1RJZgPay/91m5WqqiuwzOBHNo27kqpR/M
e3Q+A+h4ZysPE8pALNMyt9Xxa9Ag/Wb0I5vp3nXVxtVYrp0HJY+sWLfb1iFLmeIn
t5ZzJTQH35csOcexWNj26zGz7Ri80Qt8nTwPJa4+VqcUt98eG6naMFy/D16gwJu8
rNpSHijnT9vlZYT0K4XGL+e0TaZT+q55BiYHJabEJzooFK4UtlVn8ZGIT0l18VQk
VY1j+m03Dcb35BHow8uxOAOS3NX/AFJvlP8=

Construtor de expressões regulares

A partir da versão 1.2.78, foi adicionado o Construtor de expressões regulares.

Ele pode ser encontrado na aba Tools -> Regex Builder. Também é possível enviar o código das páginas obtidas diretamente no Teste de extração. Para isso, é necessário ativar o modo debug e clicar no link Go to RegEx Builder.

Abrir o código da página no construtor de expressões regulares

No construtor, há a possibilidade de escolher a linguagem de programação na qual as expressões regulares obtidas serão utilizadas.

Para trabalhar com o construtor, é necessário colar o texto de origem no campo à esquerda (ou ele será inserido automaticamente a partir do Teste de extração ao clicar em Go to Regex Builder). À direita, configuramos os parâmetros da futura expressão regular.

Para compor uma expressão regular simples (por exemplo, para obter o título), basta indicar os elementos necessários da expressão regular.

  • No campo Before group (Antes do grupo), inserimos os caracteres que estão antes da informação que precisamos
  • No campo After group (Após o grupo), inserimos os caracteres que estão após os dados necessários
  • No campo Grupo começa com, indicamos os caracteres com os quais a string procurada deve começar
  • No campo Group ends with (Grupo termina com), indicamos os caracteres que devem estar no final da string procurada
Exemplo de obtenção de título usando o construtor de expressões regulares

Como pode ser visto na captura de tela acima, montamos uma expressão regular que selecionará o title do site. Antes do grupo colocaremos <title> e depois do grupo </title>, e, como exemplo, indicaremos que a string procurada começa com a letra W.

Para um teste completo da expressão regular obtida, é possível ativar as flags necessárias: g, s e i.

Também é possível compor expressões regulares mais complexas, contendo 2 ou mais grupos. Como exemplo, vamos tentar compor uma expressão regular para coletar todos os links e âncoras na lista <li>. Para isso, precisamos ativar a flag g e adicionar mais um grupo de busca, pois no primeiro grupo estarão os links e no segundo as âncoras.

Exemplo de uso de grupos no construtor de expressões regulares

Ao definir os parâmetros necessários para ambos os grupos, obtemos a expressão regular:

<li><a href="(.+?)">(.+?)<\/a

Para testar a expressão regular, clique no botão Teste:

Verificação da regex criada no construtor de expressões regulares

Após a execução da expressão regular, o resultado do seu funcionamento é exibido abaixo: a string completa e os grupos capturados. Ao clicar duas vezes em qualquer elemento na tabela de resultados, o texto inicial rola até o local onde essa correspondência foi encontrada.