>  기사  >  백엔드 개발  >  크롤링 및 크롤링 방지를 위해 Python 정규식을 사용하는 방법

크롤링 및 크롤링 방지를 위해 Python 정규식을 사용하는 방법

WBOY
WBOY원래의
2023-06-23 09:19:42559검색

크롤링 과정에서 크롤링 방지 메커니즘을 자주 접하게 되는데, 이를 위해서는 이러한 장애물을 우회하기 위해 몇 가지 도구와 기술을 사용해야 합니다. 그중 정규식은 크롤러에서 데이터 일치 및 처리를 수행하는 데 도움이 되는 매우 중요한 도구입니다. 아래에서는 크롤링 및 크롤링 방지에 Python 정규식을 사용하는 방법을 소개합니다.

  1. 정규식 이해하기

정규식은 특정 기호와 단어를 통해 대상 문자열의 특정 패턴을 설명하는 데 사용되는 도구입니다. Python에서는 re 모듈을 사용하여 정규식을 조작할 수 있습니다.

예를 들어 전화번호(xxx-xxxx-xxxx 형식)를 일치시키려면 다음 정규식을 사용할 수 있습니다.

import re

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

이 정규식에서 d는 다음을 의미합니다. 숫자 일치, {3}는 3개 숫자 일치, {4}는 4개 숫자 일치, -는 하이픈 일치를 의미합니다. 이 정규식을 통해 패턴과 일치하는 전화번호를 일치시킬 수 있습니다. 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)

    웹 콘텐츠 크롤링
    1. 크롤링 방지에 앞서 먼저 대상 웹사이트의 콘텐츠를 크롤링해야 합니다. Python에서는 요청 라이브러리를 사용하여 웹 페이지 콘텐츠를 얻을 수 있습니다. 예를 들어, Maoyan 영화의 순위 페이지를 얻으려면 다음 코드를 사용할 수 있습니다:
    from selenium import webdriver
    
    url = 'https://weibo.com/xxxxxx'
    
    browser = webdriver.Firefox()
    browser.get(url)
    
    time.sleep(10)
    
    html = browser.page_source

    그 중 headers 매개변수는 위조된 요청 헤더이므로 일부를 우회하는 데 도움이 될 수 있습니다. 크롤러 방지 메커니즘. response.text는 획득한 웹페이지 콘텐츠를 나타냅니다. 이제 대상 웹페이지의 소스 코드를 얻었습니다.

      데이터 처리에 정규식 사용

      웹페이지 소스 코드를 얻은 후에는 정규식을 사용하여 필요한 정보를 추출해야 합니다. Maoyan 영화 순위를 예로 들면, 순위에 있는 모든 영화의 이름과 개봉 시간을 얻고 싶습니다. 소스 코드를 살펴보면 이 정보가 다음 HTML 태그에 있음을 알 수 있습니다.

      rrreee

      다음 정규식을 사용하여 영화 이름과 출시 시간을 일치시킬 수 있습니다.
        rrreee
      1. 이 정규식에서 .*?는 탐욕스럽지 않은 일치, 즉 필요한 텍스트 내용만 일치함을 나타냅니다. re.S.가 개행 문자를 포함한 모든 문자와 일치할 수 있음을 의미합니다. 이제 영화 제목과 개봉 시간을 일치시키는 정규식을 구축했습니다.
      2. 다음으로 정규식의 findall 메서드를 사용하여 일치하는 결과를 추출할 수 있습니다.
      3. rrreee
      4. 이 작업은 각 요소가 각각 영화 제목을 나타내는 목록을 반환합니다. 그리고 발매 시간. 이제 우리는 Maoyan 영화 순위 페이지의 모든 영화 정보를 성공적으로 크롤링했습니다.
        1. 사용자 행동 시뮬레이션
        2. 크롤링 방지에 앞서 액세스 빈도 제한 설정, IP 차단 등과 같이 웹사이트에서 사용하는 몇 가지 일반적인 크롤링 방지 방법을 이해해야 합니다. 이러한 크롤러 방지 메커니즘을 방지하려면 사용자의 일반적인 동작을 시뮬레이션해야 합니다. 예를 들어, Maoyan 영화 순위 페이지를 크롤링할 때 무작위 시간 간격을 설정하여 인간이 웹을 탐색하는 행동을 시뮬레이션할 수 있습니다.
        rrreee

        이 코드 조각에서는 random.uniform(0, 3) code >는 0에서 3 사이의 난수를 생성한다는 의미이고, <code>time.sleep(interval)은 프로그램이 해당 시간 동안 기다리도록 한다는 의미입니다.

        🎜🎜동적 로딩 페이지 크랙🎜🎜🎜일부 웹사이트는 페이지에 동적 로딩 기술을 사용합니다. 즉, 페이지 콘텐츠를 동적으로 생성하려면 JavaScript 및 기타 스크립팅 언어를 사용해야 합니다. 이러한 종류의 페이지를 얻기 위해 요청 라이브러리를 직접 사용하는 경우 정적 HTML 코드만 얻을 수 있고 동적으로 생성된 콘텐츠는 얻을 수 없습니다. 이때 Selenium 라이브러리를 사용하여 브라우저가 페이지 콘텐츠를 정상적으로 로드할 수 있도록 인간 작업을 시뮬레이션할 수 있습니다. 예를 들어 Weibo의 댓글 페이지를 가져오려면 다음 코드를 사용할 수 있습니다. 🎜rrreee🎜위 코드를 사용하면 동적 로딩으로 생성된 댓글 영역을 포함하여 전체 페이지 콘텐츠를 가져올 수 있습니다. 🎜🎜요약🎜🎜이 문서에서는 크롤링 및 크롤링 방지를 위해 Python 정규식을 사용하는 방법을 소개합니다. 🎜🎜🎜정규식 이해 🎜🎜웹 콘텐츠 크롤링 🎜🎜 🎜🎜동적 로딩 페이지를 크랙하세요. 🎜🎜🎜이 팁이 크롤링 및 크롤링 방지 기능을 향상하고 더 많은 대상 데이터를 얻는 데 도움이 되기를 바랍니다. 🎜

위 내용은 크롤링 및 크롤링 방지를 위해 Python 정규식을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.