루비 웹페이지 캡처 두 번째 부분

13461 단어 htmlrubywebdevcss

이것은 연습의 두 번째 부분이다.



지난번에 우리는 좀 더 간단한 분류를 얻었는데, 너희들은 위에서 첫 번째 부분을 볼 수 있다
여기서 우리는 더욱 깊이 있는 토론을 진행할 것이다.우리는 간단한 것부터 다시 시작할 것이다.맨 위에 깊이 있는 링크와 관련된 줄거리가 하나 있지만, 아래로 굴러갈 때, 너는 완전한 개요를 볼 수 있으며, 다른 페이지로 갈 필요가 없다.많은 집합을 잡을 때, 이것은 우리의 시간을 절약할 수 있기 때문에, 우리는 이 집합을 사용하도록 한다.
<div class="inline canwrap">
            <p>
                <span>    The Pinky and The Brain who live in the future travel back in time to give their present-dwelling counterparts a book on how to take over the world. The present pair travel to the future and find themselves in a world where cockroaches and are ruling the planet. After being captured, they escape to their capsule, which takes them safely back to the lab. But when Pinky leaves the book in the capsule, the craft vanishes, leaving the jet-lagged mice pondering how to take over the world yet again.</span>
                <em class="nobr">Written by
<a href="/search/title?plot_author=Anonymous&amp;view=simple&amp;sort=alpha&amp;ref_=tt_stry_pl">Anonymous</a></em>            </p>
        </div>
우리가 본 구역을 강조 표시합니다. 이것은 canwrap이라는 종류입니다.한번 해볼게요.네가 쓰는 종류를 다시 봐라그 이름 전에narf.get_text(parsed_episode.css('.canwrap'))응, 그것이 제시한 결과는 다음과 같다
=> ["The Pinky and The Brain who live in the future travel back in time to give their present-dwelling counterparts a book on how to take over the world. The present pair travel to the future and find themselves in a world where cockroaches and are ruling the planet. After being captured, they escape to their capsule, which takes them safely back to the lab. But when Pinky leaves the book in the capsule, the craft vanishes, leaving the jet-lagged mice pondering how to take over the world yet again.\n                Written by\nAnonymous",
 "Plot Keywords:\n friendship\n                        |\n friends who live together\n            | See All (2) »",
 "Genres:\n Animation |\n Comedy |\n Family |\n Sci-Fi"]
너무 많아요. 좀 더 구체적으로, 좀 더 진일보해 봅시다.">"css 선택기를 사용하고 보고 있는 하위 대상을 입력하면 됩니다.우리 .canwap > p 를 시험해 봅시다. 이것은 여전히 우리에게 작가를 제공해 줍니다.또 다른 선택기 .canwap > p > span 는 우리에게 하나의 항목을 포함하는 그룹을 제공했다.그리고 우리는 우리의 nokogiri 실천을 확장하기 위해 다른 것을 시도할 수 있다.네가 어디로 가고 싶은지 확실히 알고 있을 때, 너는 사용할 수 있다.네, 아니에요.css.여기parsed_episode.at('.canwrap > p > span')).text.들여쓰기 문자열" The Pinky and The Brain who을 반환합니다.우리 하나 던져보자.마지막으로 옷을 벗으면 우리가 원하는 것을 얻을 수 있다.우리는 out get\u text 함수를 사용하지 않습니다. 왜냐하면 이것은 그룹에 사용되기 때문에 더 많은 정보가 필요한지 확실하지 않습니다.그래서 이 함수를 쓰면 다음과 같다.
def plot
   parsed_episode.at('.canwrap > p  > span').text.strip
end

우리 지금부터 더 어려운 일을 처리합시다.배우 라인업을 살펴보자.모든 데이터가 한 표에 있으니, 우리가 그 중에서 무엇을 얻었는지 봅시다.
csstd > a 결과 보기" Maurice LaMarche\nThe BrainQueen Roach's Aid Rob Paulsen\nPinky Tress MacNeille\n Frank Welker\n"...연결이 없기 때문에 우리는 비중복적인 역할을 잃어버릴 것이다.그래서 이게 도움이 안 돼요. 배우가 어디서 끝나고, 역할이 어디서 시작되는지 어떻게 알 수 있을까요?좀 더 구체적인 것을 시도해 봅시다. 배우와 캐릭터에 관한 것들이 있을지도 몰라요...
우리 즐겁게 놀자.우리는 사진에서 자신을 이끌어 낸 다음에 오른쪽의 캐릭터를 단독 수조로 수집하고 자모의 형식으로 연결한다.그래서 사진의 제목은 배우의 이름이다.parsed_episode.css('.primary_photo > a > img') 사진으로 이동해 보겠습니다.
첫 번째 항목은 다음과 같은 정보를 제공합니다.
=> #(Element:0x3ff3fd8e31c8 {
  name = "img",
  attributes = [
    #(Attr:0x3ff3fd8e3178 { name = "height", value = "44" }),
    #(Attr:0x3ff3fd8e3164 { name = "width", value = "32" }),
    #(Attr:0x3ff3fd8e3150 { name = "alt", value = "Maurice LaMarche" }),
    #(Attr:0x3ff3fd8e313c { name = "title", value = "Maurice LaMarche" }),
더 많지만, 우리는 배우의 이름이 안에 있다!너무 좋아요.nokogiri는 원소의 실례이기 때문에 방법을 호출하여 앞의 두 가지 (명칭, 속성) 를 얻을 수 있습니다.
그러니까 우리가 들어가면우리는 속성을 유사한 산열에 넣을 것이다.
=> {"height"=>#(Attr:0x3ff3fd8e3178 { name = "height", value = "44" }),
 "width"=>#(Attr:0x3ff3fd8e3164 { name = "width", value = "32" }),
 "alt"=>#(Attr:0x3ff3fd8e3150 { name = "alt", value = "Maurice LaMarche" }),
 "title"=>#(Attr:0x3ff3fd8e313c { name = "title", value = "Maurice LaMarche" }),
아니오, 우리는 단지 제목에 들어가서 그곳을 볼 수 있습니다...또 다른 속성!!!이제 우리는 전체 함수parsed_episode.css('.primary_photo > a > img')[0].attributes["title"].value를 우리 Maurice에게만 주었고, 이 모든 것을 얻기 위해 함수를 하나 썼다.
def actors
    parsed_episode.css('.primary_photo > a  > img').map {|inner| inner.attributes["title"].value}
end
이것은 일련의 배우들에게 주어져서 매우 좋다.이것이 바로 우리가 원하는 것이다. 이렇게 하면 우리는 질서정연하게 그들을 배역과 연결시킬 수 있다.
우리 td를 시험해 봅시다.성격, 이것은 합리적인 것 같다.수조 중의 첫 번째 결과는 "\n The Brain / \n Queen Roach's Aid \n \n \n (voice)\n \n \n " 와, 정말 엉망진창이다.우리 옷 벗어보자..."The Brain / \n Queen Roach's Aid \n \n \n (voice)" 여전히 좋지 않다. 우리는 지금 두 배역을 배우와 결합시킬 수 있도록 배열의 일부로 삼고 싶다.정당하다Ruby에는 정규 표현식이 내장되어 있습니다.이 모든 줄 바꿈 문자와 공백을 하나의 공백으로 변경합시다.너는 쓸 수 있다.gsub(//[:space:]+/,“”).띠다그래서 네가 얻은 모든 것을 함께 놓아라.
def characters
    chars = parsed_episode.css('td.character').map {|char| char.text.strip}
    chars.map { |char| char.gsub(/[[:space:]]+/, " " ).strip}
end
이로 인해
=> ["The Brain / Queen Roach's Aid (voice)",
 "Pinky (voice)",
 "Queen Roach / First Lady / Time Machine Computer (voice)",
 "The President (voice)"]
다 잘 될 거야!

우리가 그것들을 한 줄로 배열하는 것이 가장 좋은 것 같다.Actor는 키로, character는 배열 값으로 사용됩니다.문자는 사선으로 구분된다는 것을 기억하기 때문에 나는 이것이 간단한 함수라고 생각한다.
def cast_assesment
    i = 0
    cast = {}
    while i < actors.length
        cast[actors[i]] = characters[i].split(" / ")
        i+=1
    end

    cast
end
우리는 한 종류에서 이렇게 했기 때문에 배우와 배역을 함수라고 부른다는 것을 명심하세요.그래서 우리는 단지 이 함수들이 되돌아오는 수조를 두루 훑어보았을 뿐이다.우리가 무엇을 얻었는지 봅시다.
[1] pry(main)> narf.cast_assesment
=> {"Maurice LaMarche"=>["The Brain", "Queen Roach's Aid (voice)"],
 "Rob Paulsen"=>["Pinky (voice)"],
 "Tress MacNeille"=>["Queen Roach", "First Lady", "Time Machine Computer (voice)"],
 "Frank Welker"=>["The President (voice)"]}
완벽해!!!네, 다음에 선원들을 상대하겠습니다.작가와 감독, 그게 좀 복잡해졌어요.우리는 또한 json에 쓸 것이다.


코드https://github.com/AmSmo/webscraper_narf 1부는 단독 지점입니다.

좋은 웹페이지 즐겨찾기