나는 웹 사이트에서 정보를 얻으려고하고 있는데, 나는 몇 가지 다른 웹 사이트에 대해 작성하고 편집 한 스크립트를 가지고있다. 그러나이 사이트는 특히 슬픔을 일으킨다.nokogiri로 URL을 가져 오는 것
스크립트는 범주를 읽고 열려고하는 배열을 작성한 다음 각 페이지를 열어 각 범주 페이지의 각 제품에서 정보를 가져와야합니다. 배열을 구축하는 기능은 여전히 잘 작동하고 있습니다.이 웹 사이트에서는 마크 업이 다르게 반응하는 것 같습니다.
나는이 마크 업
<li>
<a class="product-link" href="http://www.DOMAIN/producturl_1">
<img class='product_image' src="image/path_1.jpg" title="" alt="PRODUCT NAME" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl_1">PRODUCT NAME 1</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl_2">
<img class='product_image' src="image/path_2.jpg" title="" alt="PRODUCT NAME 2" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl">PRODUCT NAME 2</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl_3">
<img class='product_image' src="image/path_3.jpg" title="" alt="PRODUCT NAME 3" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl_3">PRODUCT NAME 3</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl">
<img class='product_image' src="image/path.jpg" title="" alt="PRODUCT NAME" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl">PRODUCT NAME</a>
<span>PRICE</span>
</li>
내 스크립트에서 읽을 필요가;
각 제품은 제가 URL이 내 태그를 정의하려는 제품의 URL을 잡기 위해
page.css('li').each do |product|
# ...
end
내가 그런 보통
product.css('.product-title').text.strip
와 제품 이름을 선택할 수있는 <li>
태그 내에 새 행을 없애기 위해 href와 gsub의 내용을 잡으려고 이와 같은 것을 사용하십시오.
product.css('.product-title')[:href].gsub(/\n/,"")
이 경우 3,691,363,210
, 나는 그것이 href
을 읽을 얻을 수있는 방법
./script.rb:52:in []: no implicit conversion of Symbol into Integer (TypeError)
from ./script.rb:52:in block in <main>
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:237:in block in each
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:236:in upto
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:236:in each
from ./script.rb:39:in <main>
받고 있어요? 다른 웹 사이트에서 작동 할 때 왜이 오류가 발생하는지 알 수 없습니다.
답장을 보내 주셔서 대단히 감사합니다. 실제로'at_css' 옵션을 시도했지만이 오류를 반환합니다. './script.rb:52:in 블록 내 : 정의되지 않은 메소드 [] for nil : NilClass (NoMethodError) ' 첫 번째 제안에서도 같은 오류가 발생합니다. –
James
@James 이것은'css ('. product-title')'이 빈'NodeSet'을 반환하기 때문입니다. 즉,'class = "product-title"'을 가진 요소가 없습니다. 'product.at_css ('. product-title') ... ' – Stefan
요소가 존재하지만 실제로 문제없이 제품 제목 클래스의 텍스트를 가져올 수 있습니다. – James