숫자 범위의 웹 페이지에서 링크 추출

숫자 범위의 웹 페이지에서 링크 추출

다음과 같이 페이지의 숫자 순서에서 링크를 추출하고 싶습니다.

http://example.com/page001.html
http://example.com/page002.html
http://example.com/page003.html
...
http://example.com/page329.html

출력에서 원하는 것은 다음 페이지의 링크에서 수집된 URL이 포함된 텍스트 파일입니다.

http://www.test.com/index.html
http://www.google.com
http://www.superuser.com/questions

명확히 하자면, 저는 페이지를 다운로드하고 싶지 않고 단지 링크 목록만 원합니다.

Windows 소프트웨어도 좋지만 Linux도 괜찮을 것입니다. 내가 생각할 수 있는 것은 Xidel을 사용하여 긴 배치 스크립트를 작성하는 것뿐이지만 오류가 발생하면 그다지 강력하지 않을 것입니다. Curl은 다양한 페이지를 다운로드할 수 있지만 어떻게든 이를 구문 분석해야 합니다.


나를 올바른 길로 인도해준 Enigman에게 감사드립니다. 나는 파일에서 URL을 읽고 $site에 저장된 문자열과 일치하는 링크를 내보내는 Perl 스크립트를 만들었습니다.

use warnings;
use LWP;
$site = "twitter.com";

my $browser = LWP::UserAgent->new;
my @ns_headers = (
    'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
    'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language' => 'en-GB,en;q=0.8',
);

open (URLLIST, 'urls.txt');
while (<URLLIST>) {
    chomp;
    print "# $_\n";
    my $response = $browser->get($_, @ns_headers);
    die "Can't get $_ -- ", $response->status_line
        unless $response->is_success;

    my @urls = $response->content =~ /\shref="?([^\s>"]+)/gi ;
    foreach $url(@urls) {
        if ($url =~ /$site/) {
            print("$url\n");
        }
    }
}
close(URLLIST);

URL 목록을 생성하기 위해 작은 배치 스크립트를 만들었습니다.

@echo off
for /l %%i in (0, 15, 75) do @echo http://www.example.com/page_%%i.html

Perl 스크립트는 오류가 발생하면 중지됩니다. 저는 이것을 선호합니다. 계속해서 수정하는 것은 쉽지 않습니다. 일부 사이트에서는 봇처럼 보이는 것을 좋아하지 않기 때문에 사용자 에이전트 및 수락 데이터가 Chrome에서 추출되었습니다. 귀하가 소유하지 않은 사이트를 스캔하려는 경우 robots.txt를 존중하고 사용자 정의 사용자 에이전트를 설정하십시오.

답변1

코드를 사용하여 이를 수행하려면 LWP::Simple 또는 Mechanize 모듈을 사용하여 Perl에서 수행할 수 있습니다.

다음은 당신이 추구하는 것일 수 있습니다LWP::Simple 모듈을 사용하여 웹 페이지에서 모든 링크 찾기

이는 Perl을 사용하는 명령줄 솔루션을 사용하는 데 익숙하다고 가정합니다. 이는 Windows 및 Linux 플랫폼 모두에서 동일하게 작동합니다. 구문 분석을 위해 명령줄에서 매개변수로 URL을 가져오도록 수정하는 데 많은 시간이 걸리지 않습니다.

답변2

네, 좋은 bash 스크립트입니다. 이는 Lynx 브라우저를 사용하여 페이지에서 URL을 추출하고 이를 텍스트 파일로 덤프합니다.

#!/bin/bash
#
# Usage:
#
#   linkextract <start> <end> <pad> <url>
#
#   <start> is the first number in the filename range. Must be an integer
#   <stop> is the last number in the filename range. Must be an integer
#   <pad> is the number of digits the number in the filename is zero-padded to. 
#   <url> is the URL. Insert "<num>" where you want the number to appear. You'll
#         need to enclose the entire argument in quotes

for (( i=${1} ; i<=${2} ; i++ )); do {
    num=$(printf "%04d" ${i})
    url=$(echo ${4} | sed "s/<num>/${num}/")
    lynx -dump -listonly "${url}" | sed -r -n "/^ +[0-9]/s/^ +[0-9]+\. //p"
}; done

데비안에서 'lynx' 패키지로 제공되는 lynx 브라우저를 설치해야 합니다. 스크립트는 추출된 URL을 stdout에 인쇄합니다. 따라서 귀하의 질문에 대한 예에서는 다음을 수행할 것입니다(링크추출이라는 파일에 스크립트를 저장한다고 가정).

$ linkextract 1 329 3 "http://example.com/page<num>.html"

답변3

당신은 사용할 수 있습니다사이트 시각화 도구 크롤러이 작업을 위해. 다운로드하여 설치한 후 클릭하세요.새 프로젝트, 웹사이트 URL을 입력하고 확인을 클릭한 다음크롤링 시작도구버튼.

크롤링이 완료되면 두 번 클릭하십시오.모든 링크보고서보고서탭. 웹사이트에 있는 모든 링크와 기타 정보(소스/대상 링크 URL, 콘텐츠 유형(HTML, 이미지, pdf, CSS 등), 응답 등)가 제공됩니다. 모든 테이블을 선택하고(컨텍스트 메뉴 또는 Ctrl+A 단축키)헤더가 있는 행 복사상황에 맞는 메뉴 항목. 그런 다음 데이터를 Excel 시트나 간단한 텍스트 문서에 붙여넣을 수 있습니다.

모든 웹사이트 링크 추출

이 프로그램은 30일 평가판 기간이 있지만 모든 기능을 갖추고 있어 1개월 동안 무료로 사용할 수 있습니다.

관련 정보