Wenn die Website über einen Anti-Crawling-Mechanismus verfügt, können die Daten nicht gecrawlt werden? Das liegt daran, dass Sie nicht wissen, wie man umkehrt und zurückklettert

Inhaltsverzeichnis

Vorwort

1. Was ist eine Proxy-IP?

2. Verwenden Sie eine Proxy-IP, um das Crawlen zu verhindern

1. Holen Sie sich die Proxy-IP

2.Stellen Sie die Proxy-IP ein

3. Überprüfen Sie die Proxy-IP

4. Richten Sie einen Proxy-Pool ein

5. Aktualisieren Sie die Proxy-IP regelmäßig

3. Anti-Klettergehäuse

1. Analysieren Sie die Zielwebsite

2. Crawlen Sie die Zielwebsite

4. Zusammenfassung


Vorwort

Die kontinuierliche Weiterentwicklung der Crawler-Technologie hat dazu geführt, dass viele Websites Anti-Crawling-Mechanismen eingeführt haben, um ihre Daten und die Privatsphäre der Benutzer zu schützen. Zu den gängigen Anti-Crawling-Methoden gehören das Festlegen von Bestätigungscodes, das Blockieren von IP-Adressen, das Begrenzen der Zugriffshäufigkeit usw.

Allerdings können diese Anti-Crawling-Mechanismen Crawler-Angriffe nicht vollständig verhindern, denn solange es Technologie gibt, muss es eine Möglichkeit geben, sie zu knacken. In diesem Artikel wird die Verwendung von Proxy-IP zum Anti-Crawling sowie zugehöriger Python-Code und -Fälle vorgestellt. 

1. Was ist eine Proxy-IP?

Proxy-IP bedeutet, dass beim Zugriff auf das Netzwerk die IP-Adresse des Proxy-Servers anstelle Ihrer eigenen IP-Adresse verwendet wird. Der Proxyserver entspricht einer Brücke. Er leitet zunächst die von uns angeforderten Daten weiter und leitet sie dann an die Zielwebsite weiter, wodurch der Effekt erzielt wird, unsere tatsächliche IP-Adresse zu verbergen.

Proxy-IP hat die Funktion, die Identität zu verbergen, Zugriffsbeschränkungen zu durchbrechen, die Zugriffsgeschwindigkeit zu verbessern und die Privatsphäre zu schützen. Im Hinblick auf Anti-Crawling kann die Verwendung von Proxy-IP blockierte IPs effektiv vermeiden und die Daten der Zielwebsite crawlen.

2. Verwenden Sie eine Proxy-IP, um das Crawlen zu verhindern

1. Holen Sie sich die Proxy-IP

Der häufigste Weg, eine Proxy-IP zu erhalten, besteht darin, kostenlose Proxy-Websites zu crawlen oder kostenpflichtige Proxy-Dienste zu erwerben. Die Qualität der kostenlosen IPs kostenloser Proxy-Websites ist ungleichmäßig und kann leicht blockiert werden, während die IP-Qualität kostenpflichtiger Proxy-Dienste relativ hoch und zuverlässiger ist.

Beim Bezug der Proxy-IP müssen Sie auf folgende Punkte achten:

  1. Die erhaltene Proxy-IP muss verfügbar sein, andernfalls kann nicht normal auf die Zielwebsite zugegriffen werden.
  2. Die erhaltene Proxy-IP muss regelmäßig aktualisiert werden, um eine Blockierung oder Ungültigkeit zu vermeiden;
  3. Verwenden Sie nicht zu häufig dieselbe Proxy-IP, da sie sonst von der Zielwebsite leicht identifiziert wird.
2.Stellen Sie die Proxy-IP ein

Wenn Sie eine Proxy-IP verwenden, müssen Sie diese im Anforderungsheader festlegen. Am Beispiel der Anforderungsbibliothek können Sie die Proxy-IP über den folgenden Code festlegen:

import requests

proxies = {
    'http': 'http://ip:port',
    'https': 'https://ip:port'
}

response = requests.get(url, proxies=proxies)

Darunter sind „ip“ und „port“ die Adresse und Portnummer der Proxy-IP, die entsprechend der tatsächlichen Situation eingestellt werden sollten.

3. Überprüfen Sie die Proxy-IP

Vor dem Crawlen müssen Sie überprüfen, ob die Proxy-IP verfügbar ist. Im Allgemeinen kann die Überprüfung der Verfügbarkeit der Proxy-IP durch einen Besuch der Website http://httpbin.org/ip überprüft werden. Am Beispiel der Anforderungsbibliothek können Sie mit dem folgenden Code überprüfen, ob die Proxy-IP verfügbar ist:

import requests

proxies = {
    'http': 'http://ip:port',
    'https': 'https://ip:port'
}

try:
    response = requests.get('http://httpbin.org/ip', proxies=proxies, timeout=10)
    if response.status_code == 200:
        print('代理IP可用')
    else:
        print('代理IP不可用')
except:
    print('代理IP请求失败')
4. Richten Sie einen Proxy-Pool ein

Die verfügbare Zeit einer einzelnen Proxy-IP ist begrenzt und auch die Qualität der Proxy-IP ist ungleichmäßig. Daher ist es erforderlich, einen Proxy-Pool einzurichten und zufällig eine verfügbare Proxy-IP für den Zugriff auszuwählen.

Der Agentenpool kann über Listen, Warteschlangen oder Datenbanken implementiert werden. Am Beispiel der Liste können Sie den Proxy-Pool über den folgenden Code festlegen:

proxy_pool = [
    'http://ip1:port1',
    'http://ip2:port2',
    'http://ip3:port3',
    ...
]

proxy = random.choice(proxy_pool)

proxies = {
    'http': proxy,
    'https': proxy
}

Darunter bedeutet „random.choice(proxy_pool)“ die zufällige Auswahl einer Proxy-IP aus dem Proxy-Pool für den Zugriff.

5. Aktualisieren Sie die Proxy-IP regelmäßig

Um zu verhindern, dass die Proxy-IP blockiert oder ungültig wird, muss die Proxy-IP regelmäßig aktualisiert werden. Es gibt viele Möglichkeiten, die Proxy-IP zu aktualisieren. Dies kann durch das Crawlen kostenloser Proxy-Websites, den Kauf kostenpflichtiger Proxy-Dienste oder den Aufbau eines eigenen Proxy-Servers erfolgen. Bei der Aktualisierung der Proxy-IP müssen Sie auf folgende Punkte achten:

  1. Die aktualisierte Proxy-IP muss verfügbar sein;
  2. Die aktualisierte Proxy-IP muss dem Proxy-Pool hinzugefügt und zufällig für die Verwendung in der nächsten Anfrage ausgewählt werden.

3. Anti-Klettergehäuse

Im Folgenden wird das Crawlen der TOP250 Douban-Filme als Beispiel verwendet, um vorzustellen, wie Proxy-IP zum Umkehren des Crawlings verwendet wird.

1. Analysieren Sie die Zielwebsite

Die Website von Douban Movie TOP250 ist: https://movie.douban.com/top250. Wir benötigen den Filmnamen, den Filmlink, die Filmbewertung und andere Informationen.

Öffnen Sie die Entwicklertools des Browsers und Sie können feststellen, dass der Datenanforderungslink der Zielwebsite lautet: https://movie.douban.com/top250?start=0&filter=, wobei „Start“ die Startposition angibt, und dort Auf jeder Seite befinden sich 25 Elemente. Daten, insgesamt 10 Datenseiten. Wir müssen diese 10 Datenseiten durchsuchen, um die Filminformationen zu erhalten.

2. Crawlen Sie die Zielwebsite

Zuerst müssen Sie die Proxy-IP erhalten. Hier wird die kostenlose Proxy-Website verwendet. Der Code lautet wie folgt:

import requests
from bs4 import BeautifulSoup
import random

def get_proxy():
    url = 'https://www.zdaye.com/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    trs = soup.find_all('tr')
    proxy_list = []
    for tr in trs[1:]:
        tds = tr.find_all('td')
        ip = tds[1].text
        port = tds[2].text
        proxy = 'http://{}:{}'.format(ip, port)
        proxy_list.append(proxy)
    return proxy_list

Unter anderem wird die Funktion „get_proxy()“ verwendet, um die Proxy-IP abzurufen und eine Liste der Proxy-IPs zurückzugeben.

Als nächstes müssen Sie den Proxy-Pool einrichten. Der Code lautet wie folgt:

proxy_pool = get_proxy()

Wählen Sie zufällig eine Proxy-IP für den Zugriff aus. Der Code lautet wie folgt:

proxy = random.choice(proxy_pool)

proxies = {
    'http': proxy,
    'https': proxy
}

Beginnen Sie dann mit dem Crawlen der Zielwebsite. Der Code lautet wie folgt:

import requests
from bs4 import BeautifulSoup
import random

def get_proxy():
    url = 'https://www.zdaye.com/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    trs = soup.find_all('tr')
    proxy_list = []
    for tr in trs[1:]:
        tds = tr.find_all('td')
        ip = tds[1].text
        port = tds[2].text
        proxy = 'http://{}:{}'.format(ip, port)
        proxy_list.append(proxy)
    return proxy_list

def get_movie_info(url, proxies):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers, proxies=proxies)
    soup = BeautifulSoup(response.text, 'html.parser')
    items = soup.find_all('div', class_='info')
    movie_list = []
    for item in items:
        name = item.find('span', class_='title').text
        href = item.find('a')['href']
        rating = item.find('span', class_='rating_num').text
        movie_info = {
            'name': name,
            'href': href,

            'rating': rating
        }
        movie_list.append(movie_info)
    return movie_list

if __name__ == '__main__':
    proxy_pool = get_proxy()
    movie_list = []
    for i in range(10):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(i*25)
        proxy = random.choice(proxy_pool)
        proxies = {
            'http': proxy,
            'https': proxy
        }
        movie_list += get_movie_info(url, proxies)
    print(movie_list)

Beim Ausführen des Codes ist die Proxy-IP möglicherweise nicht verfügbar. Dies kann durch mehrmaliges Versuchen oder regelmäßiges Aktualisieren der Proxy-IP behoben werden.

4. Zusammenfassung

In diesem Artikel wird die Verwendung von Proxy-IP zum Anti-Crawling vorgestellt und relevanter Python-Code und -Fälle bereitgestellt. Beim tatsächlichen Crawlen von Daten müssen Sie außerdem auf die folgenden Punkte achten:

  1. Vermeiden Sie häufige Anfragen an die Zielwebsite und minimieren Sie die Belastung der Zielwebsite.
  2. Simulieren Sie echte Anfragen und legen Sie angemessene Anfrage-Header-Parameter wie User-Agent und Referer fest.
  3. Behandeln Sie Anti-Crawling-Mechanismen wie Bestätigungscodes, JS-Rendering, dynamische IP usw.

Kurz gesagt, der Anti-Crawling-Mechanismus stellt eine unvermeidliche Herausforderung bei der Crawler-Entwicklung dar. Er erfordert kontinuierliches Erlernen der Technologie, Erforschung von Methoden und Überlegen von Strategien, um Herausforderungen besser zu bewältigen und die erforderlichen Daten zu erhalten.

Guess you like

Origin blog.csdn.net/wq10_12/article/details/133167181