Python Pyppeteer Scraperapi -Integration

In dieser Anleitung zeige ich Ihnen, wie Sie mit Pythons Pyppeteer -Bibliothek für Kopflosen Browser -Automatisierung problemlos Scraperapi verwenden können. Ich werde Sie durch genau so schnell wie möglich durch das Integrieren von Scraperapi führen und gemeinsame Probleme vermeiden.

Um Pyppeteer mit Scraperapi korrekt zu verwenden, sollten Sie den Browser so konfigurieren, dass sie unsere Proxy -Server direkt verwenden, wie Sie es jeder andere Proxy tun würden.

Installieren Sie zuerst Pyppeteer:

Hier erfahren Sie, wie Sie Ihren Pyppeteer -Browser so konfigurieren, dass alle Anforderungen über Scraperapi weitergeleitet werden:

import asyncio
from pyppeteer import launch

API_KEY = 'YOUR_API_KEY'

async def main():
   browser = await launch({
       'args': (
           f'--proxy-server=http://proxy-server.scraperapi.com:8001'
       )
   })
  
   page = await browser.newPage()
  
   await page.authenticate({
       'username': 'scraperapi',
       'password': API_KEY
   })
  
   await page.goto('http://quotes.toscrape.com/')
  
   quotes = await page.evaluate('''() => {
       return Array.from(document.querySelectorAll('.quote')).map(quote => ({
           text: quote.querySelector('.text').innerText,
           author: quote.querySelector('.author').innerText
       }));
   }''')
  
   print(quotes)
   await browser.close()

asyncio.run(main())

Und das war's. Wenn Pyppeteer eine Anfrage stellt, wird die Anfrage über unsere Proxy -Server gesendet, und Sie können Pyppeteer wie gewohnt verwenden.

Hier ist ein Beispielergebnis:

(
  {
    "text": "“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”",
    "author": "Albert Einstein"
  },
  {
    "text": "“It is our choices, Harry, that show what we truly are, far more than our abilities.”",
    "author": "J.K. Rowling"
  },
  {
    "text": "“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”",
    "author": "Albert Einstein"
  },
  {
    "text": "“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”",
    "author": "Jane Austen"
  },
  {
    "text": "“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”",
    "author": "Marilyn Monroe"
  },
  {
    "text": "“Try not to become a man of success. Rather become a man of value.”",
    "author": "Albert Einstein"
  },
  {
    "text": "“It is better to be hated for what you are than to be loved for what you are not.”",
    "author": "André Gide"
  },
  {
    "text": "“I have not failed. I've just found 10,000 ways that won't work.”",
    "author": "Thomas A. Edison"
  },
  {
    "text": "“A woman is like a tea bag; you never know how strong it is until it's in hot water.”",
    "author": "Eleanor Roosevelt"
  },
  {
    "text": "“A day without sunshine is like, you know, night.”",
    "author": "Steve Martin"
  }
)

Alternative Methode: Verwenden der SDK

Sie können auch unseren Python SDK für eine einfachere Integration verwenden:

Installieren Sie zuerst Scraperapi SDK

pip install scraperapi-sdk

Beispiel

import asyncio
from pyppeteer import launch
from scraperapi_sdk import ScraperAPIClient

API_KEY = 'YOUR_API_KEY'
client = ScraperAPIClient(API_KEY)

async def main():
   browser = await launch(headless=True)
   page = await browser.newPage()
  
   html = client.get('http://quotes.toscrape.com/')
   await page.setContent(html)
  
   quotes = await page.evaluate('''() => {
       return Array.from(document.querySelectorAll('.quote')).map(quote => ({
           text: quote.querySelector('.text').innerText,
           author: quote.querySelector('.author').innerText
       }));
   }''')
  
   print(quotes)
   await browser.close()

asyncio.run(main())

Verwenden Sie zusätzliche Schaferapi -Funktionalität

Mit Scraperapi können Sie die Funktion der API anpassen, indem Sie Ihren Anforderungen zusätzliche Parameter hinzufügen. Beispielsweise können Sie Premium -Proxies verwenden, indem Sie benutzerdefinierte Header einstellen:

await page.setExtraHTTPHeaders({
   'X-ScraperAPI-Premium': 'true',
   'X-ScraperAPI-Country': 'us',
   'X-ScraperAPI-Session': '123'
})

Die API akzeptiert die folgenden Parameter über Header:

Parameter Kopfball Beschreibung
Prämie X-scraperapi-premium Aktivieren Sie Premium -Wohn- und Mobile -IPs, indem Sie es auf `true` setzen
Country_Code X-SCRAPERAPI-LAND Aktivieren Sie Country Geotargeting, indem Sie es auf „US`“ setzen
Session_Number X-scraperapi-Sitzung Verwenden Sie den gleichen Proxy, indem Sie ihn auf `123` festlegen

Konfigurieren von Parallelität und Wiederholung

Konfigurieren Sie das gleichzeitige Browser -Grenzwert auf der Grundlage der Thread -Zulage Ihres Plans, um das Beste aus Ihrem Schaferapl -Plan herauszuholen:

import asyncio
from pyppeteer import launch

API_KEY = 'YOUR_API_KEY'
CONCURRENT_BROWSERS = 5  # Free Plan has 5 concurrent threads

async def scrape_page(url):
   browser = await launch({
       'args': (f'--proxy-server=http://proxy-server.scraperapi.com:8001')
   })
  
   page = await browser.newPage()
   await page.authenticate({
       'username': 'scraperapi',
       'password': API_KEY
   })
  
   await page.goto(url)
  
   quotes = await page.evaluate('''() => {
       return Array.from(document.querySelectorAll('.quote')).map(quote => ({
           text: quote.querySelector('.text').innerText,
           author: quote.querySelector('.author').innerText
       }));
   }''')
  
   await browser.close()
   return {'url': url, 'quotes': quotes}

async def scrape_multiple_pages(urls):
   semaphore = asyncio.Semaphore(CONCURRENT_BROWSERS)
  
   async def scrape_with_semaphore(url):
       async with semaphore:
           return await scrape_page(url)
  
   tasks = (scrape_with_semaphore(url) for url in urls)
   results = await asyncio.gather(*tasks)
   print(results)

# Usage
urls = (
   'http://quotes.toscrape.com/page/1/',
   'http://quotes.toscrape.com/page/2/',
   'http://quotes.toscrape.com/page/3/',
)

asyncio.get_event_loop().run_until_complete(scrape_multiple_pages(urls))

Wiederholung fehlgeschlagene Anfragen

Bei den meisten Websites sind über 97% Ihrer Anfragen beim ersten Versuch erfolgreich. Einige Anfragen können jedoch scheitern. Implementieren Sie die Wiederholungslogik, um diese Fälle zu bewältigen:

import asyncio
from pyppeteer import launch

API_KEY = 'YOUR_API_KEY'
MAX_RETRIES = 3

async def scrape_with_retry(url, retries=MAX_RETRIES):
   for i in range(retries):
       try:
           browser = await launch({
               'args': (f'--proxy-server=http://proxy-server.scraperapi.com:8001')
           })
          
           page = await browser.newPage()
           await page.authenticate({
               'username': 'scraperapi',
               'password': API_KEY
           })
          
           await page.goto(url, {'timeout': 60000})  # 60 second timeout
          
           quotes = await page.evaluate('''() => {
               return Array.from(document.querySelectorAll('.quote')).map(quote => ({
                   text: quote.querySelector('.text').innerText,
                   author: quote.querySelector('.author').innerText
               }));
           }''')
          
           await browser.close()
           return quotes
          
       except Exception as e:
           print(f"Attempt {i + 1} failed: {e}")
           if i == retries - 1:
               raise e

# Usage
async def main():
   quotes = await scrape_with_retry('http://quotes.toscrape.com/')
   print(quotes)

asyncio.run(main())

Letzte Notizen

  • Pyppeteer + Scraperapi = skalierbar, jS-fähiges Scraping mit Proxy-Rotation
  • Methode 1 (Proxy-Modus) eignet sich am besten zum Interaktiven/Seiten-Skript-Scraping
  • Methode 2 (SDK) eignet sich hervorragend für HTML -Snapshots + Schnelles DOM -Parsen
  • Konfigurieren Sie Parallelität und Wiederholen Sie nach Ihrem Plan
  • Arbeitet mit JavaScript-hochwertigen Websites dank Pyppeteer

Weitere Ressourcen:

Scraperapi -Dokumente

Pyppeteer -Dokumente

So verwenden Sie Pyppeteer in Python zum Web -Scraping

Mein Name ist Kadek und ich bin ein Student aus Indonesien und studiere derzeit Informatik in Deutschland. Dieser Blog dient als Plattform, auf der ich mein Wissen zu Themen wie Web Scraping, Screen Scraping, Web Data Mining, Web Harvesting, Web Data Extraction und Web Data Parsing teilen kann.