Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie reguläre Python-Ausdrücke zum Crawlen und Anti-Crawling

So verwenden Sie reguläre Python-Ausdrücke zum Crawlen und Anti-Crawling

WBOY
WBOYOriginal
2023-06-23 09:19:42559Durchsuche

Beim Crawlen stoßen wir häufig auf Anti-Crawling-Mechanismen, die den Einsatz einiger Tools und Techniken erfordern, um diese Hindernisse zu umgehen. Unter diesen sind reguläre Ausdrücke ein sehr wichtiges Werkzeug, das uns beim Datenabgleich und der Datenverarbeitung im Crawler helfen kann. Im Folgenden stellen wir vor, wie Sie reguläre Python-Ausdrücke zum Crawlen und Anti-Crawling verwenden.

  1. Reguläre Ausdrücke verstehen

Reguläre Ausdrücke sind ein Werkzeug zur Beschreibung von Textmustern. Sie können bestimmte Muster von Zielzeichenfolgen durch bestimmte Symbole und Wörter beschreiben. In Python können wir das re-Modul verwenden, um reguläre Ausdrücke zu manipulieren.

Wenn wir beispielsweise eine Telefonnummer (im Format xxx-xxxx-xxxx) zuordnen möchten, können wir den folgenden regulären Ausdruck verwenden:

import re

regex = re.compile(r'd{3}-d{4}-d{4}')

In diesem regulären Ausdruck bedeutet d Übereinstimmung mit Zahlen, {3} bedeutet Übereinstimmung mit 3 Zahlen, {4} bedeutet Übereinstimmung mit 4 Zahlen, - bedeutet Übereinstimmung mit Bindestrichen. Durch diesen regulären Ausdruck können wir Telefonnummern zuordnen, die dem Muster entsprechen. d表示匹配数字,{3}表示匹配3个数字,{4}表示匹配4个数字,-表示匹配连字符。通过这个正则表达式,我们就可以匹配出符合该模式的电话号码。

  1. 爬取网页内容

在进行反爬虫之前,我们首先需要爬取目标网站的内容。在Python中,我们可以使用requests库来获取网页内容。例如,我们想要获取猫眼电影的排行榜页面,可以使用如下代码:

import requests

url = 'https://maoyan.com/board'

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)

html = response.text

其中,headers参数是伪造的请求头,可以帮助我们绕过一些反爬虫机制。response.text表示获取到的网页内容,现在我们已经拿到了目标网页的源代码。

  1. 使用正则表达式进行数据处理

拿到网页源代码后,我们需要使用正则表达式来提取出我们需要的信息。以猫眼电影排行榜为例,我们想要获取排行榜中所有电影的名称和上映时间。通过查看源代码,我们可以发现这些信息都在如下的HTML标签中:

<dd>
    <div class="movie-item-info">
        <p class="name"><a href="/films/1211269" title="误杀" data-act="boarditem-click" data-val="{movieId:1211269}">误杀</a></p>
        <p class="star">
                主演:肖央,谭卓,钟南山
        </p>
<p class="releasetime">上映时间:2020-12-04</p>    </div>
    <div class="movie-item-number score-num">
        <p class="score"><i class="integer">9.</i><i class="fraction">7</i></p>        
    </div>
</dd>

我们可以使用如下的正则表达式来匹配出电影名称和上映时间:

pattern = re.compile('<p class="name"><a href="/films/d+" title="(.*?)" data-act="boarditem-click".*?<p class="releasetime">(.*?)</p>', re.S)

这个正则表达式中,.*?表示非贪婪匹配,也就是只匹配必要的文本内容。re.S表示让.可以匹配任意字符,包括换行符。现在我们已经构建了一个可以匹配电影名称和上映时间的正则表达式。

接下来,我们可以使用正则表达式的findall方法来提取出匹配到的结果:

movies = re.findall(pattern, html)

这个操作会返回一个列表,其中每一个元素都是一个元组,分别表示电影名称和上映时间。现在我们已经成功地爬取了猫眼电影排行榜页面中的所有电影信息。

  1. 模拟用户行为

在进行反爬虫之前,我们需要先理解一些网站常用的反爬虫手段,例如设置访问频率限制、IP封锁等。为了避免这些反爬虫机制,我们需要模拟用户正常的行为。比如,在爬取猫眼电影排行榜页面的时候,我们可以设置一个随机的时间间隔来模拟人类浏览网页的行为:

import time

interval = random.uniform(0, 3)
time.sleep(interval)

这个代码片段中,random.uniform(0, 3)表示生成一个0到3之间的随机数,time.sleep(interval)

    Webinhalte crawlen
    1. Vor dem Anti-Crawling müssen wir zunächst den Inhalt der Zielwebsite crawlen. In Python können wir die Anforderungsbibliothek verwenden, um Webseiteninhalte abzurufen. Wenn wir beispielsweise die Rangliste von Maoyan-Filmen erhalten möchten, können wir den folgenden Code verwenden:
    from selenium import webdriver
    
    url = 'https://weibo.com/xxxxxx'
    
    browser = webdriver.Firefox()
    browser.get(url)
    
    time.sleep(10)
    
    html = browser.page_source

    Unter diesen ist der Parameter headers ein gefälschter Anforderungsheader, der uns helfen kann, einige zu umgehen Anti-Crawler-Mechanismen. response.text stellt den erhaltenen Webseiteninhalt dar. Jetzt haben wir den Quellcode der Zielwebseite erhalten.

      Verwenden Sie reguläre Ausdrücke für die Datenverarbeitung

      Nachdem wir den Quellcode der Webseite erhalten haben, müssen wir reguläre Ausdrücke verwenden, um die benötigten Informationen zu extrahieren. Am Beispiel der Maoyan-Filmrangliste möchten wir die Namen und Veröffentlichungszeiten aller Filme in der Rangliste erhalten. Wenn wir uns den Quellcode ansehen, können wir feststellen, dass diese Informationen in den folgenden HTML-Tags enthalten sind:

      rrreee

      Wir können den folgenden regulären Ausdruck verwenden, um den Filmnamen und die Veröffentlichungszeit abzugleichen:
        rrreee
      1. In diesem regulären Ausdruck .*? gibt einen nicht gierigen Abgleich an, d. h. nur den Abgleich mit dem erforderlichen Textinhalt. re.S bedeutet, dass . mit jedem Zeichen übereinstimmen kann, einschließlich Zeilenumbrüchen. Jetzt haben wir einen regulären Ausdruck erstellt, der Filmtitel und Veröffentlichungszeiten abgleicht.
      2. Als nächstes können wir die Methode findall für reguläre Ausdrücke verwenden, um die übereinstimmenden Ergebnisse zu extrahieren:
      3. rrreee
      4. Diese Operation gibt eine Liste zurück, deren jedes Element ein Tupel ist. Gibt den Filmtitel an und Release-Zeit. Jetzt haben wir alle Filminformationen auf der Maoyan-Filmranking-Seite erfolgreich gecrawlt.
        1. Benutzerverhalten simulieren
        2. Vor dem Anti-Crawling müssen wir einige gängige Anti-Crawling-Methoden verstehen, die von Websites verwendet werden, z. B. das Festlegen von Zugriffsfrequenzbeschränkungen, IP-Blockierung usw. Um diese Anti-Crawler-Mechanismen zu vermeiden, müssen wir das normale Verhalten der Benutzer simulieren. Wenn wir beispielsweise die Rangliste der Maoyan-Filme crawlen, können wir ein zufälliges Zeitintervall festlegen, um das Verhalten von Menschen beim Surfen im Internet zu simulieren:
        rrreee

        In diesem Codeausschnitt ist der Code random.uniform(0, 3) > bedeutet, eine Zufallszahl zwischen 0 und 3 zu generieren, und <code>time.sleep(interval) bedeutet, das Programm auf die entsprechende Zeit warten zu lassen.

        🎜🎜Dynamisch ladende Seiten knacken🎜🎜🎜Einige Websites verwenden auf ihren Seiten dynamische Ladetechnologie, was bedeutet, dass sie JavaScript und andere Skriptsprachen verwenden müssen, um Seiteninhalte dynamisch zu generieren. Wenn wir die Anforderungsbibliothek direkt verwenden, um diese Art von Seite abzurufen, können wir nur statischen HTML-Code und keinen dynamisch generierten Inhalt erhalten. Zu diesem Zeitpunkt können wir die Selenium-Bibliothek verwenden, um menschliche Vorgänge zu simulieren, sodass der Browser den Seiteninhalt normal laden kann. Wenn wir beispielsweise die Kommentarseite von Weibo abrufen möchten, können wir den folgenden Code verwenden: 🎜rrreee🎜Mit dem obigen Code können wir den vollständigen Seiteninhalt abrufen, einschließlich des durch dynamisches Laden generierten Kommentarbereichs. 🎜🎜Zusammenfassung🎜🎜Dieser Artikel stellt vor, wie man reguläre Ausdrücke für das Crawlen und Anti-Crawling verwendet. 🎜🎜Das Crawlen von Webinhalten; 🎜🎜 Simulieren Sie das Benutzerverhalten. 🎜🎜Dynamische Ladeseiten knacken. 🎜🎜🎜Ich hoffe, diese Tipps können Ihnen dabei helfen, das Crawlen und Anti-Crawlen zu verbessern und mehr Zieldaten zu erhalten. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie reguläre Python-Ausdrücke zum Crawlen und Anti-Crawling. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn