2015-01-29 2 views
5

배경 이미지 CSS가로드되어 사이트를 스크래핑하고 이미지를 가져올 수 없습니다.DOM에서 Nokogiri로 배경 이미지를 가져 옵니까?

Phantom.js 또는 Sentinel을 사용하지 않고 Nokogiri에서 이러한 속성을 얻을 수있는 방법이 있습니까? 배경 이미지는 실제로 인라인 스타일을 사용하므로 할 수 있어야합니다.

나는, URL의 배열에서 이미지를 얻을 수 있습니다

<div class="zoomLens" style="background-image: url(http://resources1.okadirect.com/assets/en/new/catalogue/1200x1200/EHD005MET-L_01.jpg?version=7); background-position: -14.7368421052632px -977.894736842105px; background-repeat: no-repeat;">&nbsp;</div> 

내가 기계화를 통해 노코 기리를 사용하고 있지만, 올바르게를 작성하는 방법을 모르는 :

image = agent.get(doc.parser.at('.zoomLens')["background-image"]).save("okaimages/f_deco-#{counter}.jpg") 

답변

5

나 ' 다음과 같은 것을 사용하십시오 :

require 'nokogiri' 

doc = Nokogiri::HTML('<div class="zoomLens" style="background-image: url(http://resources1.okadirect.com/assets/en/new/catalogue/1200x1200/EHD005MET-L_01.jpg?version=7); background-position: -14.7368421052632px -977.894736842105px; background-repeat: no-repeat;">&nbsp;</div>') 

doc.search('.zoomLens').map{ |n| n['style'][/url\((.+)\)/, 1] } 
# => ["http://resources1.okadirect.com/assets/en/new/catalogue/1200x1200/EHD005MET-L_01.jpg?version=7"] 

트릭은 괄호의 내용을 잡아내는 데 적합한 패턴입니다. n['style'][/url\((.+)\)/, 1]은 그룹화 된 정규 표현식을 사용할 수있는 String#[]을 사용하고 캡처에서 특정 그룹을 반환합니다. 그 일을 분석해 보려면 https://www.regex101.com/r/mV6rY6/1을 참조하십시오.

그 시점에서 이미지 URL 배열에 앉아있을 것입니다. 목록을 쉽게 반복하고 OpenURI 또는 ​​다른 HTTP 클라이언트를 사용하여 이미지를 검색 할 수 있습니다.

+0

내가 배열에있는 동적 경로로 작업 할 필요가있다. (나는 약 3000 개가있다.) 그래서이 코드는 각각 바뀌지 않을까? – Gibson

+1

그러면 정말로 그 내용을 반영하는 질문을 작성해야합니까? 우리는 당신이 우리에게 말한 것을 근거로만 대답 할 수 있습니다. 그것은 귀하의 의견의 일부가 아니거나 사양으로 언급되었습니다. 우리에게 조금만 말하면 다른 질문을하거나 바꾸는 것이 좋지 않습니다. 처음에는 모든 것을 넣으십시오. –

+0

죄송합니다, 그것을 지정합니다. – Gibson