Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby에서 HTML을 구문 분석하는 방법

Ruby로 HTML을 구문 분석하려고 합니까?

이 작업은 적절한 도구가 없는 경우 다소 어려울 수 있습니다. .

하지만 오늘은 운이 좋았습니다!

Ruby에는 Nokogiri라는 멋진 라이브러리가 있기 때문에 , HTML 구문 분석을 공원에서 산책하게 만듭니다.

몇 가지 예를 살펴보겠습니다.

먼저 nokogiri gem을 설치합니다. 함께:

gem install nokogiri

gem 설치에 문제가 있다면 다음을 시도하십시오:

gem install nokogiri -- --use-system-libraries

제목 추출 방법

그런 다음 nokogiri에서 구문 분석할 기본 HTML 스니펫이 포함된 다음 스크립트를 만듭니다. .

이 코드를 실행하여 페이지 제목 가져오기 :

require 'nokogiri'

html        = "testactual 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

다음을 좋아할 수도 있습니다.

루비 문자열 형식