Nokogiri 또는 임의의 XML/HTML 파서를 사용하여 요소 또는 요소 그룹을 찾는 가장 큰 트릭은 짧은 접근 코드로 시작하여 찾고자하는 것의 일반적인 주변으로 들어간 다음 반복적으로 추가하는 것입니다 당신이 원하는대로 가질 때까지, 당신이 가면서 잘 조정해라.
두 번째 트릭은 //
을 사용하여 문서의 루트에서 시작하려는 경우를 제외하고는 /
이 아니라 XPath를 시작하는 것을 기억해야합니다. //
은 Linux의 명령 행에서 '**/*'
와일드 카드와 유사합니다. 그것은 사방을 검색합니다.
또한 브라우저에서 제공하는 XPath 또는 CSS 접근자를 신뢰하지 마십시오. 그들은 보았 듯이 tbody
을 포함하여 HTML 소스에 대한 모든 종류의 픽스 업을 수행합니다. 대신 Ruby의 OpenURI 또는 curl
또는 wget
을 사용하여 원시 소스를 검색하고 vi
또는 vim
과 같은 편집기를 사용하거나 less
또는 cat
을 화면에 사용하십시오. 그렇게 파일을 변경할 기회가 없습니다.
마지막으로, XPath를 사용하여 검색을 청크로 분해 한 다음 Ruby가 반복 할 수있게하려면 유지하기가 어렵거나 깨지기 쉬운 복잡한 XPath를 시도하는 것보다 쉽습니다.
Nokogiri 그 자체는 매우 쉽습니다.대다수의 작업은 두 가지 방법 즉, search
및 at
의 간단한 조합입니다. 둘 다 CSS 또는 XPath 선택기를 사용합니다. search
은 형제 메서드 인 xpath
및 css
과 함께 NodeSet
을 반환합니다.이 노드는 기본적으로 반복 할 수있는 노드 배열입니다. at
, css_at
및 xpath_at
은 CSS 또는 XPath 접근 자와 일치하는 첫 번째 노드를 반환합니다. 이 모든 메소드에서 ...xpath
변형은 XPath를 허용하고 ...css
변형은 CSS 접근을 사용합니다.
일단 노드가 있으면 일반적으로 매개 변수를 추출하거나 텍스트/내용을 가져 오는 중 하나를 수행해야합니다. [attribute_to_get]
과 text
을 사용하여 쉽게 특성을 얻을 수 있습니다. 출력
require 'awesome_print'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.example.com'))
ap doc.search('a').map{ |a| [a['href'], a.text] }[0, 5]
: 우리는 같은 것을 사용하여 페이지에있는 모든 링크를 검색하고 자신의 텍스트와 관련 HREF를 반환 할 수 있습니다 그 방법을 사용
[
[0] [
[0] "/",
[1] ""
],
[1] [
[0] "/domains/",
[1] "Domains"
],
[2] [
[0] "/numbers/",
[1] "Numbers"
],
[3] [
[0] "/protocols/",
[1] "Protocols"
],
[4] [
[0] "/about/",
[1] "About IANA"
]
]
Nokogiri의 멋진 점 중 하나는 CSS 접근 기능을 지원한다는 것입니다. 때로는 CSS가 알아낼 수있는 더 빠른 경로이며 때로는 XPath가 있습니다. 필요한 경우 교환 할 수 있도록 자유롭게 사용하십시오. –
예, 저는 CSS 선택기와 XPath를 둘 다 사용합니다. 두 가지를 함께 사용하면 더욱 강력 해집니다. –