Web Scraping kann einem oft wie eine Schatzsuche vorkommen, bei der man das Web nach verborgenen Informationen, die nicht von APIs bereitgestellt werden, durchforstet. Und wie bei jeder guten Schatzsuche, gilt es auch hier, bestimmte Hürden zu überwinden.
Ein wesentliches Hindernis sind die von der Ziel-Website auferlegten Zugangssperren. Diese Sperren können verschiedene Gründe haben, z. B. strenge Scraping-Richtlinien, Bedenken im Zusammenhang mit dem Missbrauch von Ressourcen, Probleme mit der Reputation der IP-Quelle oder der Erkennung von (gefälschten) User-Agents.
Aber keine Angst, mit dieser Anleitung lernen Sie, wie Sie Web-Scraping betreiben können, ohne von der Ziel-Website blockiert zu werden, sodass Sie Ihren Schatz im Internet leicht finden können.
Strategies to Help You Avoid Access Blocks
Da Web Scraping ein komplexes Unterfangen ist, müssen Sie zur Vermeidung von Zugangssperren häufig mehrere Techniken anwenden. Im Folgenden finden Sie neun Strategien, mit denen Sie diese lästigen Blockaden umgehen können.
1. Understand Your Target’s Policies and Terms of Service
Wenn Sie beginnen, eine neue Website zu scrapen, müssen Sie sich mit ihr vertraut machen und nicht nur die HTML-Struktur der Seite kennen. Dazu gehört auch, dass Sie sich mit den Richtlinien und Nutzungsbedingungen der Website, die Sie scrapen möchten, vertraut machen. Dabei geht es oft darum, welche Haltung die Website gegenüber Web Scraping einnimmt, ob sie Scraping zulässt und welche spezifischen Seiten Sie scrapen dürfen. Die Nichteinhaltung dieser Bedingungen führt dazu, dass Sie gesperrt werden und sich möglicherweise einem rechtlichen Risiko aussetzen.
One crucial document to be aware of is the robots.txt
file. This file is located in the website’s root directory and provides instructions to web robots about which parts of the website cannot be scanned or processed.
Following is a sample of a robots.txt
file:
User-agent: *
Disallow: /private/
Disallow: /temp/
Here, the robots.txt
file instructs all web robots (denoted by the *
after User-agent
) to avoid scraping the website’s private
and temp
directories.
Zum rechtmäßigen Web Scraping gehört, dass Sie sich an die Richtlinien der jeweiligen Website halten.
2. Adhere to Ethical Scraping Standards
So wie Sie die Richtlinien einer Website einhalten sollten, ist es auch ratsam, dass Sie sich an den jeweiligen Verhaltenskodex halten. Ethische Standards für das Web-Scraping tragen nicht nur dazu bei, dass Sie nicht blockiert werden, sondern auch dazu, dass Sie die Rechte und Ressourcen Ihrer Ziel-Website achten.
Es ist von entscheidender Bedeutung, dass Sie die folgenden Leitlinien beachten:
- Don’t bombard the servers with incessant requests: Allow sufficient time gaps between requests. Some websites may detect and block web scrapers that extract large amounts of data quickly because it doesn’t seem like human behavior. To appear more natural and decrease the chances of getting blocked, adding a time delay to requests is advisable. However, rather than having a fixed time delay, it’s better to use irregular intervals to mimic human behavior more closely.
- Don’t scrape personal data without consent: This isn’t just an ethical issue but often a legal one. Always ensure you have the necessary permissions before scraping personal data.
- Respect the data you obtain: Use the data you scrape responsibly and legally. Ensure that your use of data is following all applicable laws and regulations, such as copyright laws and General Data Protection Regulation (GDPR).
Nachfolgend wird beschrieben, wie Sie in Python unregelmäßige Intervalle zwischen den einzelnen Anfragen implementieren können:
import time
import random
urls = ['https://www.targetwebsite.com/page1', 'https://www.targetwebsite.com/page2', 'https://www.targetwebsite.com/page3']
for url in urls:
response = requests.get(url)
# Process response
sleep_time = random.uniform(1, 10) # Generate a random sleep time between 1 and 10 seconds
time.sleep(sleep_time) # Sleep for a random time between requests
This code cycles through a list of URLs in the urls
array. For each URL, it makes a request to fetch it and then pauses, using the time.sleep()
function before proceeding with the next request. These random intervals help mimic human browsing behavior, reducing the chances of detection.
3. Use (Rotating) Proxies
A useful tool in your web scraping toolkit is proxies, particularly rotating proxies. A proxy serves as a gateway between you and the website you’re scraping. It masks your IP address, making your requests appear to be coming from different locations.
Rotierende Proxys gehen noch einen Schritt weiter. Anstelle einer einzigen Proxy-IP wird Ihnen ein Pool von IP-Adressen zur Verfügung gestellt. Ihre Anfragen rotieren durch diese IPs und verändern ständig Ihr digitales Erscheinungsbild. Da es für eine Website so viel schwieriger ist, bestimmte Muster bei den Anfragen zu erkennen, wird die Wahrscheinlichkeit, dass Ihr Scraper entdeckt und blockiert wird, erheblich verringert.
Außerdem tragen rotierende Proxys dazu bei, Ihre Anfragen auf mehrere IPs zu verteilen, wodurch das Risiko verringert wird, dass eine einzelne IP-Adresse wegen zu vieler Anfragen gesperrt wird.
Nachfolgend finden Sie einen Codeschnipsel, der Ihnen bei der Implementierung eines rotierenden Proxys in Python hilft:
import requests
from itertools import cycle
# List of proxies
proxy_list = ['ip1:port1', 'ip2:port2', ...]
proxy_pool = cycle(proxy_list) # create a cycle of proxies
url = 'https://www.targetwebsite.com'
for i in range(1,3):
# Get a proxy from the pool
proxy = next(proxy_pool)
print(f"Request #{i}:")
try:
response = requests.get(url, proxies={"http": proxy, "https": proxy})
print(response.content)
except:
# Most free proxies will often get connection errors, so we catch them here
print("Connection error with proxy:", proxy)
This code snippet uses a list of proxies (ie proxy_list
) that is cycled through so that each request carried out has a different IP address. This makes it harder for sites to detect your web scraping operations.
Rotierende Proxys sind ein leistungsfähiges Instrument, aber sie sollten Teil einer umfassenderen Strategie sein. Um in den rauen Gewässern des Web Scraping zu navigieren, ohne blockiert zu werden, müssen Sie diese Techniken zusammen mit den anderen in diesem Artikel erwähnten Vorgehensweisen verwenden.
4. Use the Right Headers and User Agents
Websites often use headers and user agents to detect bots. A User-Agent
is a header your browser sends to the server, providing details about the software and system initiating the request. It usually includes the application type, operating system, software vendor, and software version. This information helps the server deliver content suitable for your specific browser and system.
Beim Web Scraping ist es wichtig, legitime User-Agent-Strings (Zeichenketten) zu verwenden. Da Sie einen echten Benutzer imitieren, können Sie die Erkennungsmechanismen wirksam umgehen und die Wahrscheinlichkeit verringern, blockiert zu werden.
In addition to the User-Agent
, another important header to consider is the Referer
header. The Referer
header reveals the URL of the web page that’s linked to the resource being requested. Including this in your scraper’s requests makes it seem more like a human user navigating from one page to another.
Other helpful headers your scraper can include are Accept-Language
, Accept-Encoding
, and Connection
. These headers are usually sent by web browsers and are rarely included by scrapes. Scrapers normally neglect these headers because they don’t have a direct impact on the retrieval of web content. Including them, however, helps makes the scraper’s requests look more genuine, reducing the chances of detection.
Following is a Python snippet that sets the User-Agent
and Referer
in the request header to mimic a genuine browsing session:
url = 'https://www.targetwebsite.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
'Referer': 'https://www.google.com/'
}
response = requests.get(url, headers=headers)
5. Handle Honeypot Traps and Errors
Navigating the terrain of a website can be challenging thanks to obstacles such as honeypots. Honeypots are hidden links intentionally designed to go unnoticed by regular users but can be detected by scrapers and bots. These links are often concealed using HTML elements set to hidden
or none
, or disguised as buttons with colors matching the page background. The primary aim of incorporating honeypots is to identify and blacklist bots.
Nachfolgend finden Sie ein einfaches Codeschnipsel, das Sie in Python verwenden können, um Honeypots zu umgehen:
from bs4 import BeautifulSoup
import requests
url = 'https://www.targetwebsite.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for link in soup.select('a'):
if 'display' in link.get('style', '') and 'none' in link['style']:
continue # Skip this link
# Process link
This code skips any link with display: none
in its style attribute, a common characteristic of honeypot links.
When scraping data, another important thing to watch out for is errors, as it’s not uncommon to encounter error responses. These errors are often indicated by HTTP status codes in the 4xx range (client errors) or 5xx range (server errors). Handling these errors gracefully is crucial to avoid overwhelming the server with excessive requests, which could potentially lead to getting blocked.
One effective strategy for managing such errors is to implement an exponential backoff algorithm. This approach involves progressively increasing the time interval between subsequent retry attempts, allowing for more efficient handling of errors.
6. Use a CAPTCHA Solving Service
Ein vollautomatischer öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen (engl. „Completely Automated Public Turing test to tell Computers and Humans Apart“, CAPTCHA) ist eine Sicherheitsmaßnahme, die von vielen Websites eingesetzt wird, um automatisierte Bot-Aktivitäten, einschließlich Web Scraping, zu verhindern. CAPTCHAs sind so konzipiert, dass sie für Menschen leicht zu lösen sind, aber für Maschinen eine Herausforderung darstellen – daher der Name.
If you run into CAPTCHAs, you should consider using Bright Data’s Web Unlocker. This service employ various methods, including machine learning algorithms and even human solvers, to decipher CAPTCHA challenges on your behalf. It’s role is to automate the CAPTCHA-solving process, enabling your scraper to continue with the data extraction process unimpeded.
7. Monitor Rate Limits and Access Denials
Most websites enforce rate limits and access denials to protect their resources from being exploited by automated bots. Since every request you send to a server consumes resources, thousands of bots sending requests every second could easily bring down a server or degrade a website’s performance. To prevent this, websites enforce rate limits, and some even provide an X-RateLimit-Limit
header in their responses, detailing their rate limits. You must respect these limits to avoid getting blocked.
The server usually communicates these restrictions through HTTP status codes. A 200
status code means everything went smoothly, but a 429
code means that you’ve sent too many requests in a given amount of time. Similarly, 403
means access is forbidden, while 503
indicates the server is unavailable, possibly due to overload. Knowing these codes is vital to navigating data extraction.
Im Folgenden finden Sie ein Python-Schnipsel, das zur Einhaltung von Ratenbeschränkungen die Anfrage-Bibliothek verwendet:
import time
import requests
def respectful_requester(url, delay_interval=1):
response = requests.get(url)
# If the status code indicates rate limiting, sleep then retry
if response.status_code == 429:
print('Rate limit reached. Sleeping...')
time.sleep(delay_interval)
return respectful_requester(url, delay_interval)
elif response.status_code != 200:
print(f'Error: {response.status_code}. Try a different proxy or user-agent')
return response
This function sends a GET request to a URL and checks the response. If it encounters a 429
status code, it pauses for a specified delay interval and then tries the request again. You could also add more sophisticated handling for other status codes as necessary.
8. Scrape from Google’s Cache
Bei schwer zu scrapenden Websites oder nicht zeitkritischen Daten besteht ein alternativer Ansatz darin, Daten aus der von Google zwischengespeicherten Kopie der Website und nicht von der Website selbst abzurufen. Diese Technik kann besonders nützlich sein, wenn es um extrem schwierige Websites geht, die Web-Scraper aktiv blockieren. Diese zwischengespeicherten Websites können anstelle der ursprünglichen Websites gescrapt werden, wodurch verhindert wird, dass ein Anti-Scraping-Mechanismus ausgelöst wird. Denken Sie daran, dass diese Methode nicht narrensicher ist, da einige Websites Google anweisen, ihre Inhalte nicht zwischenzuspeichern. Außerdem sind die Daten aus dem Google-Cache möglicherweise nicht auf dem neuesten Stand.
To scrape a website from Google’s cache, simply add the site’s URL to the end of http://webcache.googleusercontent.com/search?q=cache:
. For example, if you want to scrape the Bright Data website, you can use the following URL: http://webcache.googleusercontent.com/search?q=cache:https://https://brightdata.com/
.
Obwohl das Scraping aus dem Google-Cache zuverlässiger sein kann als das Scraping einer Website, die Ihre Anfragen aktiv blockiert, sollten Sie die Einschränkungen berücksichtigen und die Relevanz der zwischengespeicherten Daten überprüfen.
9. Use Third-Party Proxies and Scraping Services
Da das Katz-und-Maus-Spiel zwischen Web-Scrapern und Website-Administratoren immer spannender wird, wird es auch immer schwieriger, unauffällig ein effektives Web-Scraping zu betreiben. Websites entwickeln ständig neue Methoden, um Web-Scraper zu erkennen, zu verlangsamen oder zu blockieren, was einen dynamischen Ansatz zur Überwindung dieser Abwehrmechanismen erforderlich macht.
Sometimes, the best approach is to let the experts handle the hard parts. This is where third-party proxies and scraping services such as Bright Data excel. Bright Data is constantly at the cutting edge of anti-scraping technologies, quickly adapting their strategies to outmaneuver new roadblocks.
Bright Data offers solutions that help you convincingly mimic human behavior, such as rotating residential proxies and automated CAPTCHA solving, allowing your scraping efforts to operate under the radar. Their services are also built to scale, helping you effortlessly accommodate the increasing needs of your web scraping projects.
Der Einsatz dieser Lösungen hilft Ihnen, Zeit und Ressourcen zu sparen. So können Sie sich auf andere Aufgaben konzentrieren, z. B. die Analyse der gewonnenen Daten und die Ableitung von Erkenntnissen daraus.
Conclusion
An diesem Punkt haben Sie es geschafft, das tückische Terrain der Web-Scraping-Blockaden zu durchlaufen. Wenn Sie die Richtlinien Ihrer Ziel-Websites verstehen, ethische Scraping-Standards anwenden, Taktiken wie rotierende Proxys, geeignete Header und User-Agents einsetzen und mit Honeypot-Fallen und Fehlern umgehen können, sind Sie jetzt gut gerüstet, um Ihre Web-Scraping-Projekte einzurichten, ohne blockiert zu werden.
However, remember that even the most proficient explorers need a reliable toolkit. That’s where Bright Data comes in. Their comprehensive solutions offer a broad array of services tailored to streamline your web scraping journey. Make use of their Web Unlocker for accessing data hidden behind CAPTCHAs. Or select from diverse proxy services, including robust proxy servers, datacenter proxies, and residential proxies, to maintain anonymity.
Viel Spaß beim Scrapen!