Exemplos de instruções de parsing

Veja exemplos práticos de instruções de parsing para o Custom Parser: trate objetos aninhados, listas, erros e arrays de arrays.

O seguinte trecho HTML é analisado usando instruções de parsing de exemplo nas próximas seções.

HTML de exemplo

<body>
    <div id="products">
        <div class="product" id="shoes">
            <div class="title">Shoes</div>
            <div class="price">223.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Super</li>
                </ul>
            </div>
        </div>
        <div class="product" id="pants">
            <div class="title">Pants</div>
            <div class="price">60.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Amazing</li>
                    <li class="description-item">Quality</li>
                </ul>
            </div>
        </div>
        <div class="product" id="socks">
            <div class="title">Socks</div>
            <div class="price">123.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Very</li>
                    <li class="description-item">Nice</li>
                    <li class="description-item">Socks</li>
                </ul>
            </div>
        </div>
    </div>
</body>

Mínimo necessário

circle-info

Caso de uso: você quer extrair o texto de todos os shoes description itens.

Exemplo 1. Seleção dos itens de descrição de shoes usando XPath.

O xpath a função encontrará um único item e o colocará em uma lista como uma string:

O exato xpath comportamento da função é descrito aqui.

Instruções de parsing aninhadas

circle-info

Caso de uso: você quer analisar todas as informações relacionadas a shoes. Além disso, o resultado analisado deve representar a estrutura do documento do HTML fornecido.

Você está mirando esta parte do HTML de exemplo:

E você gostaria que o resultado analisado tivesse a seguinte estrutura:

As instruções de parsing ficariam assim.

Exemplo 2. Instruções de parsing são usadas para analisar shoes informações.

xpath_one funciona de forma semelhante a xpath, mas ao invés de retornar uma lista de todas as correspondências, ela retorna o primeiro item correspondente.

No exemplo acima, a shoes propriedade é a única propriedade definida no escopo de instruções mais externo. A shoes propriedade contém instruções de parsing aninhadas.

O shoes o escopo de instruções não tem um pipeline definido (_fns a propriedade está ausente). Isso significa que pipelines definidos em title, price, e description escopos usarão o documento sob análise como entrada do pipeline.

No Exemplo 2, você pode ver uma repetição de //div[@id='shoes'] em expressões XPath. A repetição pode ser evitada definindo um pipeline no shoes escopo:

Exemplo 3. Definindo um pipeline no shoes escopo de instruções para evitar repetição de expressões XPath.

Usando as instruções de parsing fornecidas no Exemplo 3, o Custom Parser irá:

  1. Começar processando shoes._fns pipeline, que produzirá o shoes elemento HTML;

  2. Pegar a saída do shoes._fns pipeline e usá-la como entrada para pipelines definidos em title, price, e description escopos;

  3. Processar title, price, e description pipelines para produzir os valores finais.

O resultado será igual ao resultado do Exemplo 2:

A principal diferença entre o Exemplo 2 e o Exemplo 3 é que, no Exemplo 3, o pipeline é definido no shoes escopo. Esse pipeline adicional seleciona o elemento dos shoes e o passa para pipelines mais adiante encontrados na hierarquia de instruções.

Lista de objetos aninhados

circle-info

Caso de uso: Anteriormente, você queria analisar apenas shoes informações. Agora você quer analisar as informações de todos os produtos no HTML.

O HTML de exemplo é usado novamente como o documento sob análise.

Se você quiser que seu resultado analisado fique assim:

As instruções de parsing ficariam assim:

Exemplo 4. Analisando todos os produtos encontrados no documento HTML.

A estrutura das instruções de parsing é semelhante à do Exemplo 3. Entretanto, há duas grandes exceções:

  1. xpath é usado em vez de xpath_one em products._fns pipeline. products._fns o pipeline agora produzirá uma lista de todos os elementos que corresponderem à expressão XPath fornecida (uma lista de elementos product).

  2. _items a propriedade reservada é usada para indicar que você quer formar uma lista iterando por cada item da products._fns saída do pipeline e passando/processando cada item da lista separadamente pelo escopo do pipeline.

Se a _items propriedade reservada não fosse usada nas instruções de parsing do Exemplo 4, o resultado analisado seria o seguinte:

circle-exclamation

Selecionar o N-ésimo elemento de uma lista

Esta seção demonstra a flexibilidade dos pipelines. O mesmo problema pode ser abordado de diferentes formas.

Várias opções podem ser usadas para selecionar o N-ésimo elemento de uma lista de quaisquer valores.

circle-info

Caso de uso: você quer selecionar o preço do segundo produto da página.

O HTML de exemplo é novamente usado como exemplo. Você tem múltiplas opções para selecionar o 2º produto.

Opção 1

Você pode utilizar o seletor XPath [] e definir a seleção na expressão XPath.

Exemplo 5. Selecionar o 2º preço usando o seletor XPath [].

Resultado:

Opção 2

Você também pode usar a xpath função para encontrar todos os preços e encadeá-la para a função select_nth, que seleciona o n-ésimo elemento da lista extraída de preços.

Exemplo 6. Selecionar o 2º valor usando a função `select_nth`.

Resultado:

circle-exclamation

Opção 3

Você pode usar select_nth com qualquer tipo de lista, incluindo listas de elementos HTML:

Exemplo 7. Selecionando todos os elementos HTML de produto com class="product" ==> selecionando o 2º elemento de produto da lista ==> extraindo o texto do preço do elemento HTML do produto selecionado.

Resultado:

Tratamento de erros

Dado o seguinte trecho HTML:

E tentando analisá-lo com as seguintes instruções de parsing:

O Custom Parser retornará um resultado analisado onde price e title foram analisados normalmente, mas o description falhou ao ser analisado devido à convert_to_float função falhando ao converter string to float:

Por padrão, todos os erros são contados como avisos e são colocados dentro de _warnings a lista. Se você quiser ignorar os erros ao analisar um campo, eles podem suprimir avisos/erros com "_on_error": "suppress" parâmetro:

O que então produzirá o seguinte resultado:

Array de arrays

O Custom Parser permite arrays N-dimensionais em resultados analisados. Como exemplo, vamos usar o seguinte trecho HTML:

Suponha que você queira analisar o documento de modo que o resultado seja um array 2D 3x3 de inteiros:

Para converter o HTML no JSON acima, você pode usar as seguintes instruções de parsing:

Atualizado

Isto foi útil?