페이지에서 페이지의 모든 링크를 잡아보세요. 물론 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/.]+)세 번째 괄호는 상대 경로와 일치합니다.
rrreee
🎜대괄호를 사용하면 결과를 처리할 때 프로토콜, 도메인 이름, 상대 경로를 쉽게 얻을 수 있어 후속 처리가 용이하다는 장점이 있습니다. 🎜🎜예를 들어preg_match_all()
을 사용하여 일치시키는 경우 결과 배열 🎜index 0은 모든 결과, 1은 프로토콜, 2는 도메인 이름, 3은 상대 경로🎜입니다. 🎜🎜요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 🎜🎜관련 권장 사항: 🎜🎜🎜 PHP에서 다중 필드 퍼지 일치 쿼리를 구현하는 방법 🎜🎜🎜🎜🎜🎜php🎜mailer 바인딩 사서함을 구현하는 방법 🎜🎜🎜🎜🎜 PHP에서 첫 번째 문자를 가져오기 위해 사용자 정의 기능을 구현하는 방법 한자🎜🎜 🎜🎜🎜🎜🎜🎜🎜위 내용은 PHP를 사용하여 페이지에서 정기적인 URL 크롤링을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!