답변:
HTML-XML-유틸의 대부분의 주요 리눅스 배포판에서 사용할 수있는 패키지는, HTML 및 XML 문서를 처리 할 때 유용한 도구를 가지고 있습니다. hxselect
표준 입력에서 읽고 CSS 선택기를 기반으로 요소를 추출하는 경우가 특히 유용합니다 . 사용 사례는 다음과 같습니다.
hxselect '#the_div_id' <file
당신이 먹이를 먹이는 것에 따라 입력이 잘 형성되지 않았다는 불만이 생길 수 있습니다. 이 불만은 표준 오류에 대한 것이므로 필요한 경우 쉽게 억제 할 수 있습니다. 이에 대한 대안은 Perl의 HTML :: PARSER 패키지를 사용하는 것입니다. 그러나, 나는 Perl 기술을 가진 사람에게 내 것보다 덜 녹슬지 않을 것이다.
다음은를 <div id="the_div_id">
사용하여 요소와 내용 을 추출하는 테스트되지 않은 Perl 스크립트입니다 HTML::TreeBuilder
.
#!/usr/bin/env perl
use strict;
use warnings;
use HTML::TreeBuilder;
foreach my $file_name (@ARGV) {
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file_name);
for my $subtree ($tree->look_down(_tag => "div", id => "the_div_id")) {
my $html = $subtree->as_HTML;
$html =~ s/(?<!\n)\z/\n/;
print $html;
}
$tree = $tree->delete;
}
Perl에 알레르기가 있다면 Python에는 HTMLParser
.
PS 정규식을 사용하지 마십시오. .
각 파일에서 해당 부분을 추출하는 Ex one-liner는 다음과 같습니다.
ex -s +'bufdo!/<div.*id=.the_div_id/norm nvatdggdG"2p' +'bufdo!%p' -cqa! *.html
제자리에 저장 / 교체하려면 섹션 -cqa!
으로 변경 -cxa
하고 제거 %p
하십시오. 재귀의 경우 globbing ( **/*.html
) 사용을 고려하십시오 .
기본적으로 각 버퍼 / 파일 ( bufdo
)에 대해 다음 작업을 수행합니다.
/pattern
-패턴을 찾으십시오norm
-일반 Vi 키 스트로크 시뮬레이션 시작
n
-다음 패턴으로 이동 (Ex 모드에서 필요)vatd
-선택한 외부 태그 섹션을 제거합니다 ( html 태그 간 이동 참조 ).ggdG
-전체 버퍼를 제거합니다 (에 해당 :%d
)."2p
-이전에 삭제 한 텍스트를 다시 붙여 넣기POSIX ( :bufdo
)가 아닌 매우 효율적이지 않을 수도 있지만 작동해야합니다.
hxselect
보다 입력 형식이 더 까다 롭습니다pup
. 예를 들어, 나는군요Input is not well-formed. (Maybe try normalize?)
와 함께hxselect
어디pup
그냥 구문 분석.