Como extrair sitemaps de sites para maior eficiência
Robert Munceanu em maio 20 2021

Olá e bem-vindos de volta ao nosso programa sobre Web scraping! No episódio de hoje, vamos descobrir como é que a otimização de preços pode ajudar o nosso negócio a crescer através da recolha de dados de um sítio Web utilizando os seus mapas de sítios.
Se quer saber o que vai acontecer a seguir, sente-se, coma qualquer coisa e continue a ver, quero dizer, a ler!
Porque é que precisa de dados sobre produtos
A utilização de informações públicas para o crescimento de uma empresa é uma prática comum entre os empresários de todo o mundo.
A informação sobre preços, a monitorização da concorrência, a otimização das receitas e outras soluções para ajudar a sua empresa a prosperar podem ser adquiridas utilizando uma ferramenta de recolha de dados da Web. Imagine quanto tempo seria necessário para copiar e colar as informações de centenas de produtos numa tabela. É aqui que o WebScrapingAPI muda as regras do jogo.
A forma clássica de recolher informações com uma ferramenta de recolha de dados da Web
Imaginemos que pretende extrair os produtos de um sítio Web em massa. Uma forma de utilizar uma ferramenta de recolha de dados da Web é selecionar manualmente o URL de cada página de produto para a ferramenta recolher. Isto significa que tem de fazer alguma pesquisa no sítio Web e ver onde se encontra cada página de produto e assim por diante.
Se o sítio Web tiver apenas algumas dezenas de páginas, pode ser fácil de gerir, mas e se o sítio Web tiver centenas ou mesmo milhares de páginas? O trabalho pode tornar-se um pouco aborrecido, demorar muito tempo e ser também desagradável.
O que é que podemos fazer numa situação destas?
A forma mais rápida de o fazer
Sitemaps. O que são?
Os mapas de sítios podem ser benéficos quando falamos de SEO. São como a planta de um sítio Web, ajudando os motores de busca a encontrar, rastrear ou mesmo indexar todo o conteúdo do seu sítio Web.
Normalmente, são utilizados por grandes sítios Web para estruturar melhor as suas páginas e ajudar os motores de busca a identificar as páginas mais importantes das menos importantes.
Podemos utilizar estes mapas de sítios em nosso proveito quando fazemos scraping? Claro que sim! Vamos descobrir como podem ajudar-nos a extrair o conteúdo de um sítio Web em massa.
Vamos experimentar o método!
Para podermos utilizar a WebScrapingAPI, precisamos de criar a nossa conta e obter a nossa chave de acesso privada utilizada para autenticar com a API. Não precisa de se preocupar, pois a criação da sua conta é gratuita e não precisa de adicionar o seu cartão ou outras informações pessoais.
Ao iniciar a sessão, seremos redireccionados para o Painel de Controlo. Aqui, veremos a nossa chave de acesso que iremos utilizar dentro de momentos. Certifique-se de que a guarda para si, mas se achar que a sua chave privada foi comprometida, pode sempre redefini-la premindo o botão "Reset API Key".
Para mais detalhes sobre como funciona a WebScrapingAPI e como pode ser integrada no seu projeto, pode sempre consultar a sua documentação e, para testar, o API Playground ajuda-o a visualizar ainda melhor os resultados!
Para terminar a apresentação, vamos ver como podemos utilizar a WebScrapingAPI para fazer scraping utilizando sitemaps.
Para este exemplo, utilizaremos o NodeJS como linguagem de programação, mas pode utilizar qualquer linguagem de programação com que se sinta confortável. Em seguida, vamos analisar o mapa do site e analisar os URLs dos produtos, analisar as páginas dos produtos e armazenar os dados num ficheiro csv. Desta forma, pode fazer scraping em massa utilizando a WebScrapingAPI, mas se pretender fazer scraping apenas de determinadas páginas, pode também fazer pedidos específicos.
1. Encontrar URLs de mapas do sítio
Neste exemplo, vamos analisar os sitemaps da Maplin, que podem ser encontrados na parte inferior do seu robots.txt.
Seguindo o URL acima, seremos redireccionados para o XML que contém as ligações do mapa do sítio.

Se seguirmos a primeira hiperligação de cima, chegaremos ao mapa do site de diferentes páginas, algumas das quais são páginas de produtos! É dessas páginas que vamos extrair os dados e guardá-los num ficheiro CSV para utilização posterior. Parece simples, não é?

2. Identificar os selectores
Para extrair apenas os dados de que necessitamos, temos de saber onde estão localizados. Para o fazer, vamos visitar o URL dos interruptores de iluminação inteligentes acima e utilizar a ferramenta de desenvolvimento de inspeção.
Verificamos que cada produto da lista está localizado numa etiqueta li com a classe ais-Hits-item.
Dentro deste nó, vemos que o título e o preço estão sob a etiqueta h3 com a classe result-title e a etiqueta span com a classe after_special price, respetivamente.

3. Instalar os pacotes necessários
Este passo é bastante simples; basta instalar este conjunto de pacotes:
- jsdom: útil quando se trata de análise de HTML.
- got: este pacote ajuda-nos a efetuar o pedido HTTP à WebScrapingAPI.
- xml2js: analisa o xml e converte-o num objeto para facilitar a sua utilização.
- csv-writer: para armazenar os dados extraídos num ficheiro csv.
Para instalar todos estes pacotes, basta usar esta linha de comando no terminal dos seus projectos:
npm install jsdom got xml2js csv-writer
4. Preparar parâmetros para o pedido
Aqui vamos utilizar uma das funcionalidades da WebScrapingAPI para renderizar a página e esperar que todo o seu conteúdo seja carregado. Desta forma, podemos obter mais dados. Não se esqueça de adicionar a sua chave de acesso privada e o URL que pretende extrair, no nosso caso, o URL do mapa do site que contém as hiperligações para as páginas dos produtos.
const api_url = "https://api.webscrapingapi.com/v1"
const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
let params = {
api_key: "XXXXX",
url: url,
render_js: 1,
wait_until: 'networkidle2'
}
5. Efetuar o pedido e analisar a cadeia XML resultante
Depois de obter o resultado da API, temos de converter a cadeia de caracteres xml num objeto.
const response = await got(api_url, {searchParams: params})
const parser = new xml2js.Parser()
parser.parseString(response.body, async function (err, result) {
// the rest of the code
}
O próximo passo será iterar através dos URLs dos produtos, criar um pedido para cada um deles para extrair os dados do produto e selecionar as informações que precisamos de armazenar.
6. Iterar, pedir, selecionar
Não precisaremos iterar por todos os URLs do mapa do site para este exemplo, portanto, vamos pegar apenas os URLs da posição 5 a 10. Em seguida, prepararemos os parâmetros para a solicitação de API e usaremos o JSDOM para analisar o HTML resultante.
Para selecionar o título e o preço do produto, vimos anteriormente que estes se encontram dentro da etiqueta h3 com a classe result-title e da etiqueta span com a classe after_special price, respetivamente.
Depois de criar um objeto com o título e o preço que acabámos de extrair, empurramo-lo para o conjunto de produtos.
O código deve ser mais ou menos assim:
let products = []
for (let index = 5; index < 10; index++) {
params.url = result['urlset']['url'][index]['loc'][0]
const res = await got(api_url, {searchParams: params})
const {document} = new JSDOM(res.body).window
const elements = document.querySelectorAll('li.ais-Hits-item')
if (elements) {
elements.forEach((element) => {
let element_obj = {}
const title = element.querySelector('h3.result-title')
if (title && title.innerHTML) element_obj.title = title.innerHTML
const price = element.querySelector('.after_special.price')
if (price && price.innerHTML) element_obj.price = price.innerHTML
if (element_obj && element_obj.title && element_obj.price)
products.push(element_obj)
})
}
}
7. Armazenar os dados extraídos
É aqui que utilizamos a biblioteca csv-writer para nos ajudar a converter uma lista de objectos num ficheiro csv.
Basta especificar o caminho e o nome do ficheiro a ser criado em breve e a matriz de cabeçalhos, que consiste em objectos de coluna, em que o id representa as propriedades dos objectos de produto e o título é o nome da coluna.
const csvWriter = require('csv-writer').createObjectCsvWriter({
path: 'products.csv',
header: [
{id: 'title', title: 'Product Name'},
{id: 'price', title: 'Product Price'}
]
})
csvWriter.writeRecords(products).then(() => console.log('Success!!'))
8. Já está!
Conseguimos extrair dados utilizando mapas de sítios para navegar nas páginas de produtos de um sítio Web, parabéns! Aqui está a visualização completa do código:
const {JSDOM} = require("jsdom");
const got = require("got");
const xml2js = require("xml2js");
(async () => {
const api_url = "https://api.webscrapingapi.com/v1"
const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
let params = {
api_key: "XXXXX",
url: url,
render_js: 1,
wait_until: 'networkidle2'
}
const response = await got(api_url, {searchParams: params})
const parser = new xml2js.Parser()
parser.parseString(response.body, async function (err, result) {
let products = []
for (let index = 5; index < 10; index++) {
params.url = result['urlset']['url'][index]['loc'][0]
const res = await got(api_url, {searchParams: params})
const {document} = new JSDOM(res.body).window
const elements = document.querySelectorAll('li.ais-Hits-item')
if (elements) {
elements.forEach((element) => {
let element_obj = {}
const title = element.querySelector('h3.result-title')
if (title && title.innerHTML) element_obj.title = title.innerHTML
const price = element.querySelector('.after_special.price')
if (price && price.innerHTML) element_obj.price = price.innerHTML
if (element_obj && element_obj.title && element_obj.price)
products.push(element_obj)
})
}
}
const csvWriter = require('csv-writer').createObjectCsvWriter({
path: 'products.csv',
header: [
{id: 'title', title: 'Product Name'},
{id: 'price', title: 'Product Price'}
]
})
csvWriter.writeRecords(products).then(() => console.log('Success!!'))
})
})();
Experimente você mesmo!
Espero que este tutorial tenha sido útil e que tenha facilitado a compreensão de como é simples utilizar sitemaps em nosso benefício no que diz respeito ao web scraping.
É ainda menos moroso e, desta forma, não perderá páginas como faria normalmente ao navegar manualmente num sítio Web.
No que diz respeito à recolha de dados em massa, é evidente que a utilização de mapas de sítios é uma solução muito melhor do que a seleção manual de cada página de produto ou mesmo a utilização de um spider para rastrear o sítio Web.
Até ao próximo episódio do nosso programa sobre web scraping, que tal experimentar o WebScrapingAPI? Pode testá-lo com até 1000 chamadas gratuitas à API. Até à próxima!
Notícias e actualizações
Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

Saiba como usar o Playwright para raspagem e automação da Web com nosso guia abrangente. Desde a configuração básica até técnicas avançadas, este guia cobre tudo.


Desbloqueie o poder da automação e extraia dados valiosos da Web com facilidade. Este artigo irá guiá-lo através do processo de utilização da biblioteca Parsel em Python para extrair dados de sítios Web utilizando selectores CSS e XPath.


Domine a raspagem da Web com o Scrapy. Aprenda passo a passo com exemplos práticos neste guia completo. Junte-se agora às grandes ligas de extração de dados!
