Exemplos de instruções de análise
Veja exemplos práticos de instruções de análise para o Custom Parser: trate objetos aninhados, listas, erros e arrays de arrays.
O trecho de HTML a seguir é analisado usando instruções de parsing de exemplo nas seções seguintes.
HTML de exemplo
<body>
<div id="products">
<div class="product" id="shoes">
<div class="title">Sapatos</div>
<div class="price">223.12</div>
<div class="description">
<ul>
<li class="description-item">Ótimo</li>
</ul>
</div>
</div>
<div class="product" id="pants">
<div class="title">Calças</div>
<div class="price">60.12</div>
<div class="description">
<ul>
<li class="description-item">Incrível</li>
<li class="description-item">Qualidade</li>
</ul>
</div>
</div>
<div class="product" id="socks">
<div class="title">Meias</div>
<div class="price">123.12</div>
<div class="description">
<ul>
<li class="description-item">Muito</li>
<li class="description-item">Legal</li>
<li class="description-item">Meias</li>
</ul>
</div>
</div>
</div>
</body>Mínimo necessário
Exemplo 1. Seleção de itens da descrição de Sapatos usando XPath.
A função xpath encontrará um único item e o colocará em uma lista como uma string:
O comportamento exato xpath da função é descrito aqui.
Instruções de parsing aninhadas
Você está apontando para esta parte do HTML de exemplo:
E você gostaria que o resultado analisado tivesse a seguinte estrutura:
As instruções de parsing teriam a seguinte forma.
Exemplo 2. As instruções de parsing são usadas para analisar sapatos informações.
xpath_one funciona de forma semelhante a xpath, mas em vez de retornar uma lista de todas as correspondências, ele retorna o primeiro item correspondente.
No exemplo acima, a sapatos propriedade é a única propriedade definida no escopo mais externo das instruções. A sapatos propriedade contém instruções de parsing aninhadas.
A função sapatos o escopo das instruções não tem um pipeline definido (_fns propriedade está ausente). Isso significa que os pipelines definidos em title, price, e descrição escopos usarão o documento em análise como entrada do pipeline.
No Exemplo 2, você pode ver uma repetição de //div[@id='shoes'] nas expressões XPath. A repetição pode ser evitada definindo um pipeline no sapatos escopo:
Exemplo 3. Definindo um pipeline no sapatos escopo de instruções para evitar repetição da expressão XPath.
Ao usar as instruções de parsing fornecidas no Exemplo 3, Custom Parser irá:
Comece processando o
shoes._fnspipeline, que produzirá osapatoselemento HTML;Pegue
shoes._fnsa saída do pipeline e use-a como entrada para pipelines definidos emtitle,price, edescriçãoescopos;Processe
title,price, edescriçãoos pipelines para produzir os valores finais.
O resultado ficará 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 sapatos escopo. Esse pipeline adicional seleciona o elemento de shoes e o passa para pipelines posteriores encontrados mais profundamente na hierarquia de instruções.
Lista de objetos aninhados
A função HTML de exemplo é usado novamente como documento em análise.
Se você quiser que seu resultado analisado fique assim:
As instruções de parsing teriam a seguinte forma:
Exemplo 4. Analisando todos os produtos encontrados no documento HTML.
A estrutura das instruções de parsing parece semelhante à do Exemplo 3. No entanto, há duas exceções principais:
xpathé usado em vez dexpath_oneemproducts._fnspipeline.products._fnspipeline agora produzirá uma lista de todos os elementos que correspondem à expressão XPath fornecida (uma lista de elementos de produto)._itemspropriedade reservada é usada para indicar que você quer formar uma lista iterando por cada item daproducts._fnssaída do pipeline e passando/processando cada item da lista separadamente ao longo do escopo do pipeline.
Se _items a propriedade reservada não fosse usada nas instruções de parsing do Exemplo 4, o resultado analisado ficaria assim:
_items é usado para especificar que o Custom Parser deve passar itens separados da lista em vez da lista inteira pelas instruções de parsing.
Selecionar o N-ésimo elemento de uma lista
Esta seção demonstra a flexibilidade dos pipelines. O mesmo problema pode ser abordado de maneiras diferentes.
Várias opções podem ser usadas para selecionar o N-ésimo elemento de uma lista de quaisquer valores.
A função HTML de exemplo é usado novamente como exemplo. Você tem várias 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 [] do XPath.
Resultado:
Opção 2
Você também pode usar a xpath função xpath para encontrar todos os preços e encaminhá-los 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:
Observe como a select_nth função retorna um item de uma lista enquanto a xpath função retorna uma lista de itens, mesmo se um único item for encontrado.
Opção 3
Você pode usá-lo select_nth com qualquer tipo de lista, incluindo listas de elementos HTML:
Exemplo 7. Selecionando todos os elementos HTML do 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
Ao receber o seguinte trecho de HTML:
E ao tentar analisá-lo com as seguintes instruções de parsing:
Custom Parser retornará um resultado analisado em que price e title foram analisados normalmente, mas o descrição falhou ao ser analisado devido à convert_to_float função falhar ao converter cadeia de caracteres para float:
Por padrão, todos os erros são contados como avisos e são colocados dentro da _warnings lista. Se você quiser ignorar os erros ao analisar um campo, você pode suprimir avisos/erros com "_on_error": "suppress" parâmetro:
O que então produzirá o seguinte resultado:
Array de arrays
Custom Parser permite arrays N-dimensionais nos resultados analisados. Como exemplo, vamos usar o seguinte trecho de HTML:
Digamos que você queira analisar o documento para que o resultado seja um array bidimensional 3x3 de inteiros:
Para analisar o HTML no JSON acima, você pode usar as seguintes instruções de parsing:
Atualizado
Isto foi útil?

