Während das Internet oft als kostenlos und offen für alle angesehen wird, werden auf einigen Websites immer noch geografische Beschränkungen platziert.
Manchmal sind die Änderungen subtil, z. B. das automatische Umschalten der Sprachen. In anderen Fällen wird völlig unterschiedliche Inhalte für Menschen aus verschiedenen Ländern oder Regionen (z. B. Netflix) serviert.
An den Extremen sind einige Websites völlig unzugänglich, es sei denn, Ihre IP -Adresse stammt aus einem bestimmten Land. Während all diese Beschränkungen einen richtigen Zweck erfüllen, erschweren sie auch das Web -Scraping erheblich.
Es gibt verschiedene Möglichkeiten, um geografische Einschränkungen beim Schaben zu umgehen, z. B. die Verwendung von Proxys in Ihrem eigenen Schaber oder die Verwendung vorgefertigter Lösungen, die sich um den Ärger kümmern.
Verwenden von Proxys, um Geo-Restriktionen zu umgehen
In der Tat sind Wohngegenden die Art und Weise, wie die meisten Schaber Geo-Restriktionen umgehen. Da Sie eine IP -Adresse von einem Gerät erhalten, das sich physisch in einem Land Ihrer Wahl befindet. Wenn ein Proxy anfordert, von Ihrem Computer zu einer Website zu beantragen, wird der Meinung, dass die wahre Quelle der Anfrage in diesem Land stammt.
Obwohl es zahlreiche andere Proxy -Typen gibt, gelten Wohngegenden für die meisten Web -Scraping -Aufgaben im Allgemeinen als die beste Wahl, insbesondere für solche, die geografische Einschränkungen beinhalten. Rechenzentrale Proxies haben zwar schnell und billig, verfügen über eine begrenzte Reihe von Standorten und sind leichter zu erkennen.
ISP -Proxys würden vollkommen in Ordnung arbeiten, da sie so legitim wie Wohngegenden und so schnell wie Datencenter -Proxies sind, aber eine der teuersten Optionen verfügbar sind. Zusätzlich ist der IPS -Pool normalerweise sehr begrenzt.
Während der Kauf von Proxys direkt von einem Anbieter und der Integration in Ihren Schaber ist definitiv effizient, hat er eine Einschränkung: Sie müssen den Schaber selbst immer noch bauen. Für jedes Scraping -Projekt mit einem angemessenen Umfang ist umfangreiches Programmierkenntnis erforderlich.
Ständige Aktualisierungen der Scraping -Lösung sind auch erforderlich, da geringfügige Änderungen in Layouts, Website -Code oder irgendetwas dazwischen dazu führt, dass sie entweder vollständig brechen oder unsachgemäße Ergebnisse zurückgeben.
Dann gibt es die Kopfschmerzen bei der Analyse und Speicherung von Daten, die beide selbst komplizierte Themen sind.
Während der Kauf von Proxys von einem Anbieter für einige eine gute Lösung sein kann, ist es normalerweise denjenigen reserviert, die einen Schaber selbst bauen können.
Mit Schäfer
Scraperapi verwaltet die gesamte Scraping -Pipeline von Proxies bis hin zur Datenzustellung für die Benutzer. Es ist nicht erforderlich, etwas von Grund auf zu bauen: Sie können anfangen, sobald Sie einen Plan erhalten und einen grundlegenden Code schreiben.
Wir werden Python verwenden, um Anfragen an den Scraperapi -Endpunkt zu senden, um Daten von Websites abzurufen.
Vorbereitung
Erstens benötigen Sie eine IDE wie Pycharm- oder Visual Studio -Code, um Ihren Code auszuführen. Dann sollten Sie sich für ein Konto bei Scraperapi anmelden.
Notiz: Die kostenlose Testversion von Scraperapi reicht aus, um Geotargeting zu testen, da er Zugriff auf alle Premium -Funktionen bietet. Sobald dies abgelaufen ist, benötigen Sie jedoch einen der bezahlten Pläne, es sei denn, das US/EU -Geotargeting reicht für Ihren Anwendungsfall aus.
Sobald Sie alles eingerichtet haben, werden wir die verwenden Anfragen Bibliothek zum Senden von HTTP -Anfragen an den Schaker -Endpunkt. Seit Anfragen Ist eine Bibliothek von Drittanbietern, müssen wir sie zuerst installieren:
Das ist die einzige Bibliothek, die Sie benötigen, da Scraperapi das ganze schwere Heben für Sie durchführt. Alles, was Sie tun müssen, ist mit dem Schreiben von Code zu beginnen und die URLs zu erhalten, die Sie kratzen möchten.
Senden einer einfachen Anfrage
Es ist oft am besten, einfach zu beginnen und die Code -Komplexität zu erhöhen, während Sie gehen. Wir werden zunächst eine senden GET
Anfrage an eine Website, auf der EU -Benutzer beschränkt werden, um zu überprüfen, was passiert, wenn wir keine Wohnproxies oder Scraperapi verwenden:
import requests
resp = requests.get('https://www.chicagotribune.com/')
print(resp.text)
Wir werden die verwenden Anfragen Bibliothek durchgehend, also müssen wir es importieren. Senden a GET
Anfrage ist extrem einfach – rufen Sie das Modul mit dem an GET
Methode und in die URL als String (doppelte oder einzelne Zitate erforderlich) als Argument.
Dann benutzen wir einfach unsere resp
Objekt als Argument in der print
Befehl und einschließen text
als Methode.
Sie erhalten eine Fehlermeldung, da der Versuch, eine Antwort von der Chicago Tribune zu erhalten, während eine EU -IP -Adresse verwendet wird, sendet jedes Mal dieselbe Fehlermeldung:
Wenn Sie eine US-IP-Adresse mit einer EU-Locked-Website verwenden würden, erhalten Sie eine ähnliche Antwort. Sie alle unterscheiden sich leicht; Das Endergebnis ist jedoch das gleiche.
import requests
resp = requests.get('https://www.rte.ie/player/')
print(resp.text)
RTE beschränkt die Benutzer nur auf EU. Mit einer US -IP -Adresse erhalten Sie also:
Daher ist es erforderlich, dass entweder Scraperapi- oder Wohngegenden Stellvertreter auf einige Websites zugreifen. Senden wir zunächst eine Anfrage über Scraperapi:
import requests
payload = {'api_key': ‘YOUR-API-KEY-HERE', 'url': 'https://httpbin.org/ip'}
resp = requests.get('https://api.scraperapi.com', params=payload)
print(resp.text)
Beginnen Sie wie immer mit dem Import der erforderlichen Bibliothek (Anfragen in unserem Fall). Definieren Sie dann ein Wörterbuchobjekt, das zwei hat key:value
Paare – Der API -Schlüssel (für die Authentifizierung erforderlich) und die URL, die die Website ist, die Sie kratzen möchten.
Wir erstellen dann ein Antwortobjekt, das die von der Website abgerufene Antwort speichert. Sie benötigen zwei Argumente, von denen der erste immer der Schaker -Endpunkt ist, von dem das zweite das Nutzlast -Wörterbuch ist.
Im Moment drucken wir einfach die Antwort. Das Ausführen des Codes sollte einfach die IP -Adresse der Herkunft abrufen und im Standardausgabebildschirm drucken.
Auswahl eines geografischen Ortes
Wir werden jetzt auf Websites umsteigen, die Daten basierend auf dem Standort anzeigen, z. B. das Anzeigen verschiedener Preise, Währungen oder Inhalte im Allgemeinen.
Beginnen wir zunächst einen Ländercode in unserem Scraperapi -Code, um die Chicago Tribune zu besuchen und zu sehen, ob wir eine Antwort erhalten.
Alles was Sie tun müssen, ist eine zusätzliche hinzuzufügen Schlüssel: Wert Kombinieren Sie Ihr Payload -Wörterbuch. Es wird sein country_code
als Schlüssel und der Ländercode im 2-Buchstaben ISO 3166-1-Format.
import requests
payload = {'api_key': 'YOUR-API-KEY-HERE', 'url': 'https://www.chicagotribune.com/', 'country_code': us}
resp = requests.get('https://api.scraperapi.com', params=payload)
print(resp.text)
Sie sollten eine große HTML -Antwort erhalten, die viele Daten zeigt. Unser Screenshot wird zu Demonstrationszwecken abgeschnitten:
Daten mit BeautifulSoup analysieren
Wir werden mit der Installation von BeautifulSoup beginnen:
pip install beautifulsoup4
Jetzt müssen wir einige Änderungen an unserem Code vornehmen:
- Wir werden den Antworttext (die vollständige HTML -Datei) in ein wunderschönes Objekt einlegen, das zum Parsen verwendet wird.
- Anschließend wird eine Liste erstellt, um alle Artikel -Titel zu speichern.
- Für die Ausgabe führen wir eine weitere Schleife aus, die jeden Titel auf einer neuen Zeile druckt.
import requests
from bs4 import BeautifulSoup
payload = {
"api_key": "YOUR-API-KEY-HERE",
"url": "https://www.chicagotribune.com/",
"country_code": "us",
}
resp = requests.get("https://api.scraperapi.com", params=payload)
soup = BeautifulSoup(resp.text, "html.parser")
titles = (
a.get_text(strip=True)
for a in soup.select("a.article-title")
)
unique_titles = sorted(set(titles))
for t in unique_titles:
print
Beachten Sie, dass wir auch a erstellen unique_titles
Objekt, das sowohl sortiert als auch in ein Set verwandelt wird (aus einer Liste). Sets in Python speichern keine doppelten Werte. Daher ist dies eine einfache Möglichkeit, doppelte Titel aus unserer ursprünglichen Liste zu entfernen.
Sie sollten eine Antwort erhalten, die ähnlich ist:
Schließlich zeigen einige Websites dieselbe Seite mit unterschiedlichen Daten für viele geografische Standorte. Die meisten E -Commerce -Unternehmen tun dies, um die Preise für Benutzer transparenter zu gestalten.
Daten mit Pandas speichern
Sie möchten wahrscheinlich mehr als nur Daten ausdrucken. Andernfalls verlieren Sie alles, nachdem Sie Ihre IDE oder ein anderes Programm geschlossen haben.
Normalerweise die Pandas Die Bibliothek ist mehr als ausreichend für grundlegende Abkratzenprojekte. Beginnen Sie mit der Installation:
Wir werden auch den Standard importieren datetime Bibliothek zum Hinzufügen von Zeitstempeln zu unserer CSV -Datei, was sehr nützlich ist, wenn Sie später dorthin zurückkehren müssen.
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
payload = {
"api_key": "YOUR-API-KEY-HERE",
"url": "https://www.chicagotribune.com/",
"country_code": "us",
}
resp = requests.get("https://api.scraperapi.com", params=payload)
soup = BeautifulSoup(resp.text, "html.parser")
titles = (
a.get_text(strip=True)
for a in soup.select("a.article-title")
)
unique_titles = sorted(set(titles))
df = pd.DataFrame({"Headline": unique_titles})
today = datetime.now().strftime("%Y-%m-%d")
outfile = f"chicago_tribune_headlines_{today}.csv"
df.to_csv(outfile, index=False, encoding="utf-16")
print(f"✔ Saved {len(df)} headlines → {outfile}")
Das Ausführen des Codes erstellt nun eine CSV -Datei und druckt eine Erfolgsnachricht aus. Der zugrunde liegende Code ist recht einfach – ein Datenrahmen wird erstellt, der mit der Zeile „Überschrift“ beginnt, und dann ist eine andere Zeile einer der Titel.
Um der Datei einen Zeitstempel hinzuzufügen, verwenden wir datetime.now()
und wenden Sie es in eine Zeichenfolge mit strftime
und geben Sie das Format im Argument an.
Schließlich wird der Datenrahmen in eine CSV -Datei ausgegeben.
Notiz: Wir verwenden „UTF-16“ -Codierung, da „UTF-8“ nicht alle Zeichen richtig übersetzt.
Ihre CSV -Datei sollte ein wenig so aussehen:
Weitere Überlegungen
Das Schaben einer einzelnen Website mit Scraperapi ist für jedes reale Projekt letztendlich etwas zu einfach, obwohl es als großartiger Ausgangspunkt dient. Sie können Ihren Scraping -Code auf zwei primäre Weise verbessern.
Eine davon ist, dass Sie Scraperapi verwenden können, um die Homepage einer Website zu kratzen, alle URLs zu sammeln und so weiterzumachen, um Ihre URL -Liste zu erstellen.
Alternativ können Sie a erstellen list
Objekt manuell und geben Sie alle URLs ein, die Sie kratzen möchten, und führen Sie dann eine Schleife über jedes Element als URL aus.
Hier ist der vollständige Codeblock, an dem Sie arbeiten können:
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
payload = {
"api_key": "YOUR-API-KEY-HERE",
"url": "https://www.chicagotribune.com/",
"country_code": "us",
}
resp = requests.get("https://api.scraperapi.com", params=payload)
soup = BeautifulSoup(resp.text, "html.parser")
titles = (
a.get_text(strip=True)
for a in soup.select("a.article-title")
)
unique_titles = sorted(set(titles))
df = pd.DataFrame({"Headline": unique_titles})
today = datetime.now().strftime("%Y-%m-%d")
outfile = f"chicago_tribune_headlines_{today}.csv"
df.to_csv(outfile, index=False, encoding="utf-16")
print(f"✔ Saved {len(df)} headlines → {outfile}")