2013-05-13 2 views
2

는 한 페이지에서 몇 가지 태그를 촉각 근 위해 기계화를 사용하는 것을 시도하고있다. 저는 전에 Nokogiri를 사용하여 성공적으로 긁어 모았습니다. 그러나 이제는 더 넓은 Mechanize 클래스로 결합하려고합니다. 여기에 노코 기리 문입니다 :Nokogiri 구문을 화면 스크래핑을 위해 기계화로 변환하려면 어떻게해야합니까?

page = Nokogiri::HTML(open(@model.url, "User-Agent" => request.env['HTTP_USER_AGENT'])) 
@model.icons = page.css("link[rel='apple-touch-icon']").to_s 

그리고 여기가 기계화 해당하는 것이라고 생각 것입니다 그러나 그것은 작동하지 않습니다 :

agent = Mechanize.new 
page = agent.get(@model.url, "User-Agent" => request.env['HTTP_USER_AGENT']) 
@model.icons = page.search("link[rel='apple-touch-icon']").to_s 

첫 번째는 예상 <link rel="apple-touch-icon" etc etc..></link>로 링크 태그를 반환합니다. 두 번째 문은 빈 문자열을 반환합니다. 내가 to_s을 끝내면 나는 아주 긴 출력을 얻는다. 나는 그것이 오류 또는 실제 Mechanize 객체라고 가정합니다. 이 문제를 다시 어려운 샘플 HTML없이 https://gist.github.com/eadam/5583541

+1

는 "작동하지 않는"정의합니다. 'search' 메소드의 반환 값은 무엇입니까? 당신은 무엇을 얻을 것으로 예상합니까? 페이지를 가리키거나 적절한 스 니펫을 포함하면 도움이 될 것입니다. –

+0

전체 문장으로 질문을 업데이트하고 작동하지 않는 정의. 감사. – Adam

+1

"초강력 출력"을 게시 할 수 있습니까? –

답변

1

, 그래서 이것은 당신을 도울 수있는 몇 가지 일반적인 정보입니다 : 긴 출력

링크 문자열로 변환하지 않을 때.

"긴 출력"은 search 메서드를 사용했을 때 얻은 Nokogiri :: NodeSet의 출력입니다 (inspect). search 여러 노드를 반환하거나 노드가 많은 아이들이있는 경우 inspect 출력은 그게 무엇을해야하는지의하는 방법을 갈 수 있지만.

csssearch는 점에서 그들이 노드 집합을 반환 매우 유사하다. css는 전달 된 문자열이 search이 더 일반적인 반면, CSS를 접근하고,에 통과 CSS 또는 XPath를 표현이었다 여부를 알아 내려고 시도한다고 가정합니다. 그것이 틀린 경우에 성냥은 일치를 찾아 내기 위하여 패턴을 위해 나쁜 것이다. at 또는 search을 사용하여 Nokogiri가 알아 내도록하거나 at_css, at_xpath 또는 cssxpath을 각각 대체 할 수 있습니다. at 파생물은 모두 search('some_path').first과 비슷한 첫 번째 일치 노드를 반환합니다.

to_s 사용, 좀 더 명시하는 것을 선호합니다.에 전달 된 소스의 표현으로 다시 노드 세트를 전환하거나 to_xml, to_xhtml 또는 to_html. 당신이 css을 위해처럼

search의 출력을 얻을하지 않습니다? 내가 파싱하는 HTML에 대해 테스트 할 수 없기 때문에 나는 모른다. 데이터 처리와 같은 질문에 대답하는 것은 GIGO 상황입니다.