Saiba sobre o cabeçalho que você pode incluir em suas solicitações para obter dados totalmente renderizados, que você pode armazenar em um arquivo HTML ou como uma captura de tela PNG.
Se a página que você deseja raspar requer carregar JavaScript para inserir dinamicamente todos os dados necessários no DOM, em vez de configurar e usar um navegador headless por conta própria, você pode incluir o "X-Oxylabs-Render: html" cabeçalho em suas requisições. Todas as requisições com este cabeçalho incluído serão totalmente renderizadas, e todos os dados serão armazenados em um arquivo HTML ou em uma captura de tela PNG (dependendo do parâmetro passado).
A renderização de JavaScript leva mais tempo para raspar a página. Ao usar renderização de JavaScript, defina o tempo limite do lado do cliente para 180 segundos.
Para garantir o menor consumo de tráfego possível, nosso sistema não carrega ativos desnecessários durante a renderização da página.
import requests# Use suas credenciais do Web Unblocker aqui.USERNAME,PASSWORD='YOUR_USERNAME','YOUR_PASSWORD'# Defina o dicionário de proxies.proxies ={'http':f'http://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000','https':f'https://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',}headers ={'X-Oxylabs-Render':'html'}response = requests.get('https://ip.oxylabs.io/location',verify=False,# É necessário ignorar o certificadoproxies=proxies,headers=headers,)# Imprime a página de resultado no stdoutprint(response.text)# Salva o HTML retornado no arquivo result.htmlwithopen('result.html','w')as f: f.write(response.text)
Raspando o HTML de um site
Neste exemplo, iremos renderizar a página inicial do YouTube e raspar o conteúdo da página. Normalmente a página inicial do YouTube ficaria assim se o Web Unblocker for usado sem renderização de JavaScript:
Exemplo de página do Youtube sem renderização de JavaScript
Adicionando o "X-Oxylabs-Render: html" cabeçalho, conforme fornecido nos exemplos abaixo, permitirá a renderização de Javascript e retornará o HTML de uma página renderizada:
O arquivo HTML aberto em um navegador deve ficar assim:
Obtendo uma captura de tela de uma página totalmente renderizada
Para obter uma captura de tela em formato PNG em vez do HTML da página, é necessário fornecer o "X-Oxylabs-Render: png" cabeçalho.
A resposta conterá bytes brutos de uma imagem que podem ser salvos em formato PNG e abertos como no exemplo abaixo:
Exemplo de página do Youtube como captura de tela em formato PNG
Forçando renderização em páginas específicas
Para raspagem bem-sucedida, alguns tipos de página de domínios específicos exigem renderização devido ao seu conteúdo dinâmico. Nosso sistema aplica automaticamente a renderização para essas páginas, mesmo que não seja definida explicitamente pelo usuário.
Observe que trabalhos renderizados consomem mais tráfego em comparação com trabalhos não renderizados.
Queremos que nossos usuários estejam totalmente cientes disso ao raspar as seguintes páginas:
import requests
# Use suas credenciais do Web Unblocker aqui.
USERNAME, PASSWORD = 'YOUR_USERNAME', 'YOUR_PASSWORD'
# Defina o dicionário de proxies.
proxies = {
'http': f'http://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
'https': f'https://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
}
headers = {
'X-Oxylabs-Render': 'html'
}
response = requests.get(
'https://youtube.com',
verify=False, # É necessário ignorar o certificado
proxies=proxies,
headers=headers,
)
# Imprime a página de resultado no stdout
print(response.text)
# Salva o HTML retornado no arquivo result.html
with open('result.html', 'w') as f:
f.write(response.text)
import requests
# Use suas credenciais do Web Unblocker aqui.
USERNAME, PASSWORD = 'YOUR_USERNAME', 'YOUR_PASSWORD'
# Defina o dicionário de proxies.
proxies = {
'http': f'http://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
'https': f'https://{USERNAME}:{PASSWORD}@unblock.oxylabs.io:60000',
}
headers = {
'X-Oxylabs-Render': 'png'
}
response = requests.get(
'https://youtube.com',
verify=False, # É necessário ignorar o certificado
proxies=proxies,
headers=headers,
)
# Salvar captura de tela como arquivo PNG
with open('rendered_page.png', 'wb') as f:
f.write(response.content)
import fs from 'fs';
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
const username = 'YOUR_USERNAME';
const password = 'YOUR_PASSWORD';
const agent = new HttpsProxyAgent(
`https://${username}:${password}@unblock.oxylabs.io:60000`
);
// Recomendamos aceitar nosso certificado em vez de permitir tráfego inseguro (http)
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
const headers = {
'X-Oxylabs-Render': 'png',
}
await fetch('https://youtube.com', {
method: 'get',
headers: headers,
agent: agent,
}).then(res =>
res.body.pipe(fs.createWriteStream('./rendered_page.png'))
);
console.log('Image was saved');