Usando wget
eu baixei esta página da web:
Com o comando:
RobWebsiteAddress="https://www.walmart.ca/en/ip/Dispenser-Set-Tumbler-Organizer-Bathroom-Bin-Holder-Bathroom-Containers-Soap-Set-Accessories-Travel-6Pcs-Accessory-Ejoyous-Dish-Toothbrush/PRD4406MV3EZF75"
DownloadName="Ejoyous1"
wget -O- -q --user-agent=AGENT "$RobWebAddress" > "$DownloadName"
Quando tento abrir o arquivo gedit
ele fica louco.
Quando eu uso:
grep -i 23.31 Ejoyous1 | wc
0 0 0
O preço não foi encontrado. Se eu usar grep
a palavra price
, recebo uma longa linha de 146.329 caracteres retornados, o que provavelmente é o que gedit
enlouqueceu:
$ grep -i price Ejoyous1 | wc
1 6292 146329
Dentro do arquivo de .5 MB há algumas dicas:
$ grep -i necolas Ejoyous1
/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
Como você pode ver, isso é do site do Walmart. Não tenho nenhum problema em obter os preços da Costco e os preços da Ikea simplesmente baixando a página da Web wget
e pressionando-a. Também não tenho problemas para visualizar os arquivos baixados do Costco ou Ikea com gedit
.
Como posso interpretar esta linguagem se for um derivado do HTML? Quais ferramentas devo usar? Alguma pista para entrar no caminho certo?
As informações de preço são exibidas na página da Web por um script js usando API e json
É por isso que o texto do preço não está presente no código-fonte da página da Web
As ferramentas de desenvolvimento da Web do navegador mostrarão que o preço -e mais informações como estoque- vem de uma resposta json https://www.walmart.ca/api/product-page/price-offer
Como esse tipo de processo pode ser protegido por autenticação e cookies e como wget e curl não podem baixar o arquivo json, uma ideia será cadastre-se e use a API do Wallmart
https://developer.walmart.com/
Mas parece que a API é para fornecedores parceiros
Outra ideia seria reverter o processo de construção da página da Web pública para enviar uma solicitação de API bem formada...
Muitas páginas baixam o conteúdo separadamente da página principal (de um "arquivo" separado), então não há nada para grep no arquivo que você está baixando
wget
. O Firefox executa o javascript, que permite baixar o conteúdo. Você pode pressionar (Ctrl+Shift+C) para ver o console javascript. Clique em "Rede" e recarregue a página para ver quais conexões ela está fazendo. Uma das conexões é umjson
"arquivo" chamado preço-oferta.É possível obter os dados se você conseguir descobrir onde o conteúdo está localizado. Caso contrário, você teria que executar o javascript, como o Firefox faz. No entanto, não é tão simples quanto fornecer um URL. Você também precisa enviar dados para o servidor para obter as informações desejadas. (A API cmak.fr descreve .)
Isso funciona porque o navegador adiciona as informações extras (de
json
) à página antes de salvá-la. Para pular o clique manual na GUI, você pode baixar a página com o Chromium. (O Firefox também pode ser usado, mas parece mais complicado – MDN Headless Mode .)Então
grep
pelo preço: