🥳Junte-se à Comunidade Scrapeless e Solicite sua avaliação gratuita para acessar nosso poderoso kit de ferramentas de Web Scraping!
Voltar ao blog

Como usar o Pyppeteer com um Proxy em 2024

James Thompson
James Thompson

Scraping and Proxy Management Expert

18-Sep-2024

É crucial direcionar solicitações HTTP através de vários endereços IP para evitar ser banido durante a raspagem da web. É por isso que neste tutorial aprenderemos como construir um proxy Pyppeteer!

Pré-requisitos

Certifique-se de que seu sistema local esteja executando Python 3.6 ou superior.

Em seguida, use o pip para instalar o Pyppeteer do PyPI executando a linha abaixo.

language Copy
pip install pyppeteer

Está cansado de bloqueios contínuos de raspagem da web?

Scrapeless: a melhor solução de raspagem online tudo-em-um disponível!

Mantenha-se anônimo e evite banimentos com base em IP com nossa rotação inteligente de proxy de alto desempenho:

Experimente gratuitamente!

Como utilizar o Pyppeteer como um Proxy

Para começar, escreva o script scraper.py para solicitar seu endereço IP atual de ident.me.

language Copy
import asyncio
from pyppeteer import launch
 
async def main():
    # Crie uma nova instância de navegador sem cabeça
    browser = await launch()
    # Crie uma nova página
    page = await browser.newPage()
    # Navegue para o site de destino
    await page.goto('https://ident.me')
    # Selecione o elemento do corpo
    body = await page.querySelector('body')
    # Obtenha o conteúdo de texto do elemento selecionado
    content = await page.evaluate('(element) => element.textContent', body)
    # Descarte o resultado
    print(content)
    await browser.close()
 
asyncio.get_event_loop().run_until_complete(main())

Para obter o conteúdo do corpo da página de destino, execute o script.

language Copy
python scraper.py

É hora de atualizar seu script para incluir um proxy Pyppeteer. Para fazer isso, obtenha um proxy gratuito do FreeProxyList (você pode não conseguir usar o que usamos).

O script scraper.py usa a função launch(), que abre uma nova instância de navegador e permite que você passe certos parâmetros. Defina o parâmetro --proxy-server para informar ao navegador para direcionar as solicitações Pyppeteer através de um proxy. Uma das opções é args, que é uma lista de argumentos extras para enviar para o processo do navegador.

language Copy
# ...
async def main():
    # Crie uma nova instância de navegador sem cabeça
    browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
    # Crie uma nova página
    page = await browser.newPage()
# ...

Este é o código completo:

language Copy
import asyncio
from pyppeteer import launch
 
async def main():
    # Crie uma nova instância de navegador sem cabeça
    browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
    # Crie uma nova página
    page = await browser.newPage()
    # Navegue para o site de destino
    await page.goto('https://ident.me')
    # Selecione o elemento do corpo
    body = await page.querySelector('body')
    # Obtenha o conteúdo de texto do elemento selecionado
    content = await page.evaluate('(element) => element.textContent', body)
    # Descarte o resultado
    print(content)
    await browser.close()
 
asyncio.get_event_loop().run_until_complete(main())

Desta vez, quando você executar o script novamente com a opção de linha de comando python scraper.py, o endereço IP do seu proxy deve aparecer na tela.

language Copy
20.219.108.109

Autenticação Pyppeteer via Proxy

Você precisará de um nome de usuário e senha para autenticação se usar um proxy premium. Use o parâmetro --proxy-auth para isso.

language Copy
# ...
    # Crie uma nova instância de navegador sem cabeça
    browser = await launch(args=[
        '--proxy-server=http://20.219.108.109:8080'
        '--proxy-auth=<YOUR_USERNAME>:<YOUR_PASSWORD>'
        ])
# ...

Como alternativa, você pode autenticar usando a API da página, conforme mostrado abaixo:

language Copy
# ...
    # Crie uma nova página
    page = await browser.newPage()
    await page.authenticate({ 'username': '<YOUR_USERNAME>', 'password': '<YOUR_PASSWORD>' })
# ...

Usar o Pyppeteer para configurar um Proxy Dinâmico

Para evitar ser incluído na lista negra, você deve usar um proxy dinâmico para raspagem da web em vez do proxy estático que você usou anteriormente. Usando o Pyppeteer, você pode criar várias instâncias de navegador, cada uma com uma configuração de proxy exclusiva.

Para começar, obtenha outros proxies gratuitos e compile uma lista deles:

language Copy
# ...
import random
 
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
# ...

Em seguida, escreva uma função assíncrona que faz uma solicitação Pyppeteer para ident.me usando uma função assíncrona que aceita um proxy como argumento:

language Copy
# ...
async def init_pyppeteer_proxy_request(url):
    # Create a new headless browser instance
    browser = await launch(args=[
        f'--proxy-server={url}',
        ])
    # Create a new page
    page = await browser.newPage()
    # Navigate to target website
    await page.goto('https://ident.me')
    # Select the body element
    body = await page.querySelector('body')
    # Get the text content of the selected element
    content = await page.evaluate('(element) => element.textContent', body)
    # Dump the result
    print(content)
    await browser.close()
# ...

Agora, altere a função main() de modo que ela chame a função recém-construída por meio de um proxy escolhido aleatoriamente:

language Copy
# ...
async def main():
    for i in range(3):
        await init_pyppeteer_proxy_request(random.choice(proxies))
# ...

É assim que seu código deve aparecer atualmente:

language Copy
import asyncio
from pyppeteer import launch
import random
 
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
 
async def init_pyppeteer_proxy_request(url):
    # Crie uma nova instância de navegador sem cabeça
    browser = await launch(args=[
        f'--proxy-server={url}',
        ])
    # Crie uma nova página
    page = await browser.newPage()
    # Navegue para o site de destino
    await page.goto('https://ident.me')
    # Selecione o elemento do corpo
    body = await page.querySelector('body')
    # Obtenha o conteúdo de texto do elemento selecionado
    content = await page.evaluate('(element) => element.textContent', body)
    # Descarte o resultado
    print(content)
    await browser.close()
 
async def main():
    for i in range(3):
        await init_pyppeteer_proxy_request(random.choice(proxies))
    
 
asyncio.get_event_loop().run_until_complete(main())

Instale o Python Requests (ou qualquer outra biblioteca de solicitação HTTP) após colocar o código do scraper Python que o construtor de solicitações produziu em um novo arquivo:

language Copy
pip install requests

Agora que seu scraper está em execução, a página HTML para OpenSea será raspada e exibida no console.

Conclusão

O uso de um proxy com o Pyppeteer pode aumentar muito o sucesso do seu scraping da web, e agora você sabe como enviar solicitações usando proxies estáticos e dinâmicos.

Você também descobriu que uma ferramenta diferente pode concluir a tarefa com mais rapidez e precisão. A ferramenta de scraping da web do Scrapeless pode ser sua aliada se você precisar raspar em grande escala sem se preocupar com infraestrutura e tiver maior garantia de que obterá os dados de que precisa.

Na Scrapeless, acessamos apenas dados disponíveis publicamente, cumprindo rigorosamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve quaisquer atividades ilegais ou infratoras. Não oferecemos garantias e nos isentamos de qualquer responsabilidade pelo uso de informações deste blog ou de links de terceiros. Antes de se envolver em qualquer atividade de scraping, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.

Artigos mais populares

Catálogo