Web Scraping ohne blockiert zu werden

Anleitung zum Scrapen von Websites, ohne blockiert zu werden. Lernen Sie neun verschiedene Lösungen zur Überwindung von Website-Scraping-Blockaden kennen.
13 min read
Web scraping without getting blocked

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-LanguageAccept-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 serversdatacenter proxies, and residential proxies, to maintain anonymity.

Viel Spaß beim Scrapen!

More from Bright Data

Datasets Icon
Get immediately structured data
Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build reliable web scrapers. Fast.
Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?