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.
Empfohlene Methode: Verwenden Sie die Proxy -Konfiguration
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