Maison  >  Article  >  développement back-end  >  Comment utiliser les expressions régulières Python pour l'exploration et l'anti-exploration

Comment utiliser les expressions régulières Python pour l'exploration et l'anti-exploration

WBOY
WBOYoriginal
2023-06-23 09:19:42558parcourir

Dans le processus d'exploration, nous rencontrons souvent des mécanismes anti-exploration, ce qui nous oblige à utiliser certains outils et techniques pour contourner ces obstacles. Parmi elles, les expressions régulières sont un outil très important, qui peut nous aider à effectuer la mise en correspondance et le traitement des données dans les robots d'exploration. Ci-dessous, nous expliquerons comment utiliser les expressions régulières Python pour l'exploration et l'anti-exploration.

  1. Comprendre les expressions régulières

L'expression régulière est un outil utilisé pour décrire des modèles de texte. Elle peut décrire le modèle spécifique de la chaîne cible à travers certains symboles et mots spécifiques. En Python, nous pouvons utiliser le module re pour manipuler des expressions régulières.

Par exemple, si nous voulons faire correspondre un numéro de téléphone (au format xxx-xxxx-xxxx), alors nous pouvons utiliser l'expression régulière suivante :

import re

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

Dans cette expression régulière, d signifie Faire correspondre les numéros, {3} signifie faire correspondre 3 nombres, {4} signifie faire correspondre 4 nombres, - signifie faire correspondre les traits d'union. Grâce à cette expression régulière, nous pouvons faire correspondre les numéros de téléphone qui correspondent au modèle. 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)

    Exploration du contenu Web
    1. Avant l'anti-crawling, nous devons d'abord explorer le contenu du site Web cible. En Python, nous pouvons utiliser la bibliothèque de requêtes pour obtenir le contenu d'une page Web. Par exemple, si nous voulons obtenir la page de classement des films Maoyan, nous pouvons utiliser le code suivant :
    from selenium import webdriver
    
    url = 'https://weibo.com/xxxxxx'
    
    browser = webdriver.Firefox()
    browser.get(url)
    
    time.sleep(10)
    
    html = browser.page_source

    Parmi eux, le paramètre headers est un en-tête de requête falsifié, ce qui peut nous aider à contourner certains mécanismes anti-chenille. response.text représente le contenu de la page Web obtenu. Nous avons maintenant obtenu le code source de la page Web cible.

      Utilisez des expressions régulières pour le traitement des données

      Après avoir obtenu le code source de la page Web, nous devons utiliser des expressions régulières pour extraire les informations dont nous avons besoin. En prenant comme exemple le classement des films Maoyan, nous souhaitons obtenir les noms et les heures de sortie de tous les films du classement. En regardant le code source, nous pouvons constater que cette information se trouve dans les balises HTML suivantes :

      rrreee

      Nous pouvons utiliser l'expression régulière suivante pour faire correspondre le nom du film et l'heure de sortie :
        rrreee
      1. Dans cette expression régulière, .*? indique une correspondance non gourmande, c'est-à-dire une correspondance uniquement avec le contenu textuel nécessaire. re.S signifie que . peut correspondre à n'importe quel caractère, y compris les caractères de nouvelle ligne. Nous avons maintenant créé une expression régulière qui correspond aux titres de films et aux heures de sortie.
      2. Ensuite, nous pouvons utiliser la méthode findall d'expressions régulières pour extraire les résultats correspondants :
      3. rrreee
      4. Cette opération renverra une liste, dont chaque élément est respectivement un tuple. Indique le titre du film. et le temps de libération. Nous avons maintenant exploré avec succès toutes les informations sur le film dans la page de classement des films Maoyan.
        1. Simuler le comportement des utilisateurs
        2. Avant l'anti-exploration, nous devons comprendre certaines méthodes anti-exploration courantes utilisées par les sites Web, telles que la définition de limites de fréquence d'accès, le blocage d'adresses IP, etc. Afin d’éviter ces mécanismes anti-crawler, nous devons simuler le comportement normal des utilisateurs. Par exemple, lors de l'exploration de la page de classement des films Maoyan, nous pouvons définir un intervalle de temps aléatoire pour simuler le comportement des humains naviguant sur le Web :
        rrreee

        Dans cet extrait de code, random.uniform(0, 3) code > signifie générer un nombre aléatoire entre 0 et 3, et <code>time.sleep(interval) signifie laisser le programme attendre le temps correspondant.

        🎜🎜Cracker les pages à chargement dynamique🎜🎜🎜Certains sites Web utilisent la technologie de chargement dynamique dans leurs pages, ce qui signifie qu'ils doivent utiliser JavaScript et d'autres langages de script pour générer dynamiquement le contenu des pages. Si nous utilisons directement la bibliothèque de requêtes pour obtenir ce type de page, nous ne pouvons obtenir que du code HTML statique et ne pouvons pas obtenir de contenu généré dynamiquement. À l'heure actuelle, nous pouvons utiliser la bibliothèque Selenium pour simuler des opérations humaines afin que le navigateur puisse charger normalement le contenu de la page. Par exemple, si nous voulons obtenir la page de commentaires de Weibo, nous pouvons utiliser le code suivant : 🎜rrreee🎜Avec le code ci-dessus, nous pouvons obtenir le contenu complet de la page, y compris la zone de commentaires générée par le chargement dynamique. 🎜🎜Résumé🎜🎜Cet article présente comment utiliser les expressions régulières Python pour l'exploration et l'anti-exploration. Le contenu principal comprend : 🎜🎜🎜Comprendre les expressions régulières 🎜🎜Explorer le contenu Web 🎜🎜Utiliser des expressions régulières pour la correspondance de données ; Simulez le comportement des utilisateurs ; 🎜🎜Crackez les pages de chargement dynamique. 🎜🎜🎜J'espère que ces conseils pourront vous aider à mieux explorer et anti-crawl et à obtenir plus de données cibles. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn