Como usar o Pyppeteer com um Proxy em 2024

Scraping and Proxy Management Expert
É 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
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
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
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
# ...
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
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
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
# ...
# 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
# ...
# 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
# ...
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
# ...
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
# ...
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
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
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.