Ruby로 HTML을 구문 분석하려고 합니까?
이 작업은 적절한 도구가 없는 경우 다소 어려울 수 있습니다. .
하지만 오늘은 운이 좋았습니다!
Ruby에는 Nokogiri라는 멋진 라이브러리가 있기 때문에 , HTML 구문 분석을 공원에서 산책하게 만듭니다.
몇 가지 예를 살펴보겠습니다.
먼저 nokogiri gem을 설치합니다. 함께:
gem install nokogiri
gem 설치에 문제가 있다면 다음을 시도하십시오:
gem install nokogiri -- --use-system-libraries
제목 추출 방법
그런 다음 nokogiri에서 구문 분석할 기본 HTML 스니펫이 포함된 다음 스크립트를 만듭니다. .
이 코드를 실행하여 페이지 제목 가져오기 :
require 'nokogiri' html = "입력test actual content here..." parsed_data = Nokogiri::HTML.parse(html) puts parsed_data.title => "test"
HTML 문자열 대신 URL에서 직접 데이터를 구문 분석하려면…
할 수 있습니다 :
require 'open-uri' Nokogiri::HTML.parse(open('https://example.com')).title
그러면 HTML이 다운로드되고 제목이 표시됩니다.
지금 :
제목을 얻는 것은 좋지만 더 고급 예제를 보고 싶을 것입니다.
그렇지?
웹사이트에서 링크를 추출하는 방법을 살펴보겠습니다.
앵커 링크 추출
페이지의 모든 링크를 원하는 경우 먼저 HTML이 필요합니다.
동일한 open-uri
를 사용할 수 있습니다. 모든 공개 웹사이트용 HTML을 다운로드하는 기술입니다.
그런 다음 Nokogiri로 구문 분석하여 문서 개체를 가져옵니다.
좋아요 :
document = Nokogiri::HTML.parse(open('https://example.com')) document.class # Nokogiri::HTML::Document
다음 두 가지 방법 중 하나로 이 개체에 정보를 쿼리할 수 있습니다.
- XPath 쿼리 사용
- CSS 선택기 사용
먼저 XPath를 사용하여 이 작업을 수행하는 방법을 살펴보겠습니다.
코드는 다음과 같습니다. :
tags = document.xpath("//a")
그게 무슨 역할을 합니까?
페이지의 모든 HTML 태그를 필터링합니다. , 요청한 것을 제공합니다.
이 경우 "a" 태그입니다.
HTML에 링크가 포함된 태그는 무엇입니까?
지금 :
가지고 있는 것은 Nokogiri::XML::Element
의 배열입니다. 이러한 태그를 나타냅니다.
링크 URL 및 텍스트를 얻으려면 다음을 수행하십시오.
tags.each do |tag| puts "#{tag[:href]}\t#{tag.text}" end를 넣습니다.
이렇게 하면 화면에 모든 링크가 한 줄에 하나씩 인쇄됩니다.
링크 대신 페이지에서 사용 가능한 이미지 목록과 같은 다른 정보를 스크랩하려는 경우 동일한 프로세스를 따를 수 있습니다.
변경해야 하는 유일한 것은 원하는 태그 유형입니다.
예를 들어 :
tags = document.xpath("//img") images_urls = tags.map { |t| t[:src] }
img
위치 이미지용 HTML 태그이고 src
이미지 URL이 저장된 속성입니다.
올바른 CSS 선택기 및 속성을 찾으려면 브라우저의 개발자 도구를 사용하세요.
Nokogiri와 함께 CSS 선택기 사용
xpath
를 대체하여 CSS 선택기를 사용할 수 있습니다. css
메소드 방법.
예시 :
headers = document.css("h1") paragraphs = document.css("p")<블록 인용>
참고 :at_css
의 차이점 &css
첫 번째는 첫 번째 일치하는 요소만 반환하지만 후자는 일치하는 모든 요소를 반환합니다.
CSS를 사용하면 동일한 결과를 얻을 수 있습니다. 요점은 Nokogiri에게 작업하려는 HTML 요소를 알려주는 것입니다.
대부분의 개발자는 XPath보다 CSS에 더 익숙하므로 CSS를 사용하고 싶습니다.
요약
여기에서 Nokogiri 설명서를 찾을 수 있습니다.
https://www.rubydoc.info/github/sparklemotion/nokogiri
다음을 좋아할 수도 있습니다.
루비 문자열 형식