2015-01-20 5 views
0

저는 Mechanize를 사용하여 링크 뒤에서 여러 페이지를 가져옵니다. A 페이지에는 "[전체 프로필]"이라는 링크가있는 많은 회사가 있으며, 그 뒤에는 전체 HTML이 있습니다. 페이지 A에 10 개가 있습니다. 링크를 탐색하여 배열로 저장 한 다음 나중에 사용할 수는 없습니다. 따라서 각 링크를 반복하면서 URL과 회사 HTML을 동시에 가져올 수 있습니다. 나는 그 (것)들을 저장하고 그 (것)들에 의지하기에 계획하고 있었다, 그러나 가득 차있는 연결이 아니고 나는 그것이 어떻게 행해지는지 모른다.Ruby Mechanize 배열의 링크 뒤에 HTML 가져 오기

어쨌든, 이것은 내가 현재 가지고있는 것입니다 : 일이 잘못 곳

companyobjects = agent.page.links_with(:text => '[complete profile]') 
companylinks = [] 

companyobjects.each do |i| 
    companylinks.push(i) 
    # -> Shove each company's html into the db 
    page = agent.i.href.click 
    puts 
    puts page 
end 

페이지 = agent.i.href.click입니다. 'i'는 개별 회사 여야하므로 내부 링크를 요청하고 클릭하면 페이지를 가져와야하지만 어떤 이유로 든 과거 '방법' '이 아니게됩니다.

누구나 발견 된 링크를 잡아서 HTML 태그를 잡는 방법을 알고 있습니까? 나는 길을 잃었다. 모든 의견을 감사드립니다.

건배

답변

0

각 링크를 반복하고에 연결하는 페이지를 방문하려면이 작업을해야합니다 :

agent.page.links_with(text: '[complete profile]').each do |link| 
    link.click 
    puts agent.page.body # prints HTML that corresponds to link 

    # OR 

    page = link.click 
    html = page.body 
    # do something with html 
end 

각 링크의 전체 URL을 수집 할 경우,이해야 작품 :

links = [] 
agent.page.links_with(text: '[complete profile]').each do |link| 
    links << URI.join(agent.page.uri, link.href).to_s 
end 
+0

첫 번째 반복, 어떻게 각 링크 뒤에 HTML을 잡을 수 있습니까? 그 link.click은 그 페이지에서 링크와 폼 등을 가진 Mechanize 객체로 나에게 돌아온다. 나는 전체 html을 잡으려고 찾고 있어요. get.link.click 시도했지만 오류가 던졌습니다. 건배 –

+0

브라우저를 운전하는 것처럼 생각하십시오. 'link.click'을 호출하면, 이제'agent.page'는 해당 링크에 해당하는 페이지입니다. 시연 할 답변을 업데이트하겠습니다. – ihaztehcodez

+0

기계화는 복잡한 짐승이지만 길들여질 수 있습니다. 루비의 인트로 스펙 션 및 메카 제이션의 문서화는 여러분의 친구입니다. 예를 들어,'link.click'는 객체를 반환했지만, 당신은 그것으로 무엇을해야할지 확신하지 못했습니다. 그러므로 루비의 내성을 이용하십시오 :'mystery_object = link.click; mystery_object.class.to_s'를 넣습니다. 이제'mystery_object'가'Mechanize :: Page'의 인스턴스이고 당신이 할 수있는 것을보기 위해 [documentation] (http://www.rubydoc.info/gems/mechanize/Mechanize/Page)를 확인하실 수 있습니다. 그것으로. 이 접근법은 기계화에 대한 나의 길을 배울 수있게 도와주었습니다. – ihaztehcodez