>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 페이지에서 정기적인 URL 크롤링을 구현하는 방법

PHP를 사용하여 페이지에서 정기적인 URL 크롤링을 구현하는 방법

墨辰丷
墨辰丷원래의
2018-06-01 15:48:281819검색

페이지에서 페이지의 모든 링크를 잡아보세요. 물론 PHP 정규식을 사용하는 것이 가장 편리한 방법입니다. 정규식을 작성하려면 먼저 패턴을 요약해야 합니다. 그러면 페이지의 링크에는 몇 개의 양식이 포함됩니까? 아래를 살펴보겠습니다.

머리말

링크는 한 요소(텍스트, 그림, 비디오 등)에서 다른 요소(텍스트, 그림, 비디오 등)로의 링크인 하이퍼링크입니다. 웹 페이지에는 일반적으로 세 가지 유형의 링크가 있습니다. 하나는 페이지의 전체 경로인 절대 URL 하이퍼링크이고, 다른 하나는 일반적으로 동일한 웹 사이트의 다른 페이지로 연결되는 상대 URL 하이퍼링크입니다. 페이지 내의 하이퍼링크. 일반적으로 동일한 페이지 내의 다른 위치로 연결되는 하이퍼링크입니다.

링크의 종류를 이해하고 나면, 잡아야 할 주요 링크가 절대 URL 하이퍼링크와 상대 URL 하이퍼링크라는 것을 알게 될 것입니다. 올바른 정규식을 작성하려면 찾고 있는 개체의 패턴을 이해해야 합니다.

인터넷에서 고유한 리소스를 식별하는 URL(Uniform Resource Locator)이라고도 하는 절대 링크부터 시작해 보겠습니다. URL의 구조는 프로토콜, 서버 이름, 경로 및 파일 이름의 세 부분으로 구성됩니다.

프로토콜은 열려는 파일을 처리하는 방법을 브라우저에 알려주는 식별자입니다. 가장 일반적인 프로토콜은 http 프로토콜입니다. 이 기사에서는 HTTP 프로토콜만 고려하며, 다른 https, ftp, mailto, telnet 프로토콜 등도 필요에 따라 추가할 수 있습니다.

서버 이름은 브라우저에 이 서버에 도달하는 방법을 알려주는 방법으로, 일반적으로 도메인 이름이나 IP 주소, 때로는 포트 번호(기본값은 80)입니다. FTP 프로토콜에는 사용자 이름과 비밀번호도 포함될 수 있지만 이 기사에서는 이에 대해 고려하지 않습니다.

일반적으로 /로 구분되는 경로와 파일 이름은 파일의 경로와 파일 자체의 이름을 나타냅니다. 특정 파일 이름이 없으면 이 폴더의 기본 파일에 액세스합니다(서버 측에서 설정 가능).

이제 크롤링할 절대 링크의 일반적인 형태는 다음과 같이 요약할 수 있음이 분명해졌습니다.

<span style="color: #000000">http://www.xxx.com/xxx/yyy /zzz .html<code><span style="color: #000000">http://www.xxx.com/xxx/yyy/zzz.html</span>

每个部分可以使用的字符范围有明确的规范,具体可以参考RFC1738。那么正则表达式就可以写出来了。

/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i

解释如下:

(http|https)第一个括号内匹配的是协议部分。

([wd-_]+[.wd-_]+)第二个括号内匹配的是域名部分。

([/]?[w/.]+)第三个括号内匹配的是相对路径。

写到这个时候,基本上大部分的网址都能匹配到了,但是对于URL中带有参数的还不能抓取,这样有可能造成再次访问的时候页面报错。关于参数RFC1738规范中要求是用?来分割,后面带上参数,但是现代的RIA应用有可能使用其他奇怪的形式进行分割。

稍微修改一下,这样就可以将查询参数部分搜索出来。这里仍然没有涵盖全部的情况,例如URL中有中文、有空格及其他特殊字符的情况,但是基本上能够满足我的需求了,就没有继续深化。

/(http|ftp|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.\?=&;%@#\+,]+)/i

使用括号的好处是,在处理结果时,可以很容易的获取到协议、域名、相对路径这些内容,方便后续的处理。

例如使用 preg_match_all() 각 부분에 사용할 수 있는 문자 범위는 명확한 사양이 있습니다. 자세한 내용은 RFC1738을 참조하세요. 그러면 정규식을 작성할 수 있습니다.

rrreee

설명은 다음과 같습니다.

(http|https)첫 번째 괄호는 프로토콜 부분과 일치합니다. . ([wd-_]+[.wd-_]+)
두 번째 괄호는 도메인 이름 부분과 일치합니다.

([/]?[w/.]+)세 번째 괄호는 상대 경로와 일치합니다.

이 글을 쓰는 시점에서는 기본적으로 대부분의 URL이 일치하지만, 매개변수가 있는 URL은 크롤링이 불가능하여 다시 접속할 때 페이지에서 오류가 보고될 수 있습니다. RFC1738 사양에는 어떤 매개변수가 필요합니까? 분할하고 매개변수가 따라오지만 최신 RIA 애플리케이션은 분할을 위해 다른 이상한 형식을 사용할 수 있습니다.

Query Parameter 부분을 검색할 수 있도록 살짝 수정해주세요. URL에 한자, 공백, 기타 특수 문자가 포함된 상황 등 여전히 모든 상황을 다루지는 않지만 기본적으로 내 요구 사항을 충족하므로 더 이상 진행하지 않겠습니다.

rrreee

🎜대괄호를 사용하면 결과를 처리할 때 프로토콜, 도메인 이름, 상대 경로를 쉽게 얻을 수 있어 후속 처리가 용이하다는 장점이 있습니다. 🎜🎜예를 들어 preg_match_all() 을 사용하여 일치시키는 경우 결과 배열 🎜index 0은 모든 결과, 1은 프로토콜, 2는 도메인 이름, 3은 상대 경로🎜입니다. 🎜🎜요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 🎜🎜관련 권장 사항: 🎜🎜🎜 PHP에서 다중 필드 퍼지 일치 쿼리를 구현하는 방법 🎜🎜🎜🎜🎜🎜php🎜mailer 바인딩 사서함을 구현하는 방법 🎜🎜🎜🎜🎜 PHP에서 첫 번째 문자를 가져오기 위해 사용자 정의 기능을 구현하는 방법 한자🎜🎜 🎜🎜🎜🎜🎜🎜🎜

위 내용은 PHP를 사용하여 페이지에서 정기적인 URL 크롤링을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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