Aprenda sobre o cabeçalho que você pode incluir nas suas solicitações para obter dados totalmente renderizados, que você pode salvar em um arquivo HTML ou como uma captura de tela PNG.
Se a página que você deseja extrair exigir o carregamento de JavaScript para carregar dinamicamente todos os dados necessários no DOM, em vez de configurar e usar um headless browser por conta própria, você pode incluir o "X-Oxylabs-Render: html" header em suas requisições. Todas as requisições com esse header 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 extrair a página. Ao usar a renderização de JavaScript, defina o valor de timeout 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 proxy.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,)# Imprima a página de resultado em stdoutprint(response.text)# Salve o HTML retornado no arquivo result.htmlwithopen('result.html','w')as f: f.write(response.text)
Extraindo o HTML de um website
Neste exemplo, vamos renderizar a página inicial do YouTube e extrair 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 da página do Youtube sem renderização de JavaScript
Adicionar o "X-Oxylabs-Render: html" header, como mostrado nos exemplos abaixo, ativará 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 da página do Youtube como captura de tela em formato PNG
Forçando a renderização em páginas específicas
Para uma extração bem-sucedida, alguns tipos de página de domínios específicos exigem renderização devido ao 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 extrair as seguintes páginas:
import requests
# Use suas credenciais do Web Unblocker aqui.
USERNAME, PASSWORD = 'YOUR_USERNAME', 'YOUR_PASSWORD'
# Defina o dicionário de proxy.
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,
)
# Imprima a página de resultado em stdout
print(response.text)
# Salve 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 proxy.
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');