XPathセレクタを使用してページ上の各アイテム(約24)を選択し、各アイテムのXPathセレクタを使用して各アイテムから値を返します。すべてのノードではなく、単一のノードを検索する方法
サブノードでXPathセレクタを実行していても、各サブノードに対して個別に実行したいすべてのサブノードを検索しているようです。
doc
の各アイテムを検索してから、それぞれhtml_listing
を繰り返します。その後get_field_data_from
に渡し:セレクタが存在する場合
def get_listing(doc,field_data = {})
doc.xpath(get_listing_tag[:path]).each do |html_listing|
fd = get_field_data_from(html_listing,field_data)
if !field_data && fd.detect {|_,data| !data }
set_uri doc.xpath(get_sub_page_tag[:path])
get
fd = get_listing(Nokogiri::HTML(body),fd)
end
yield fd
end
end
をだから、反復する私がいる探しているすべてのFields
の上には
selector = send("get_%s_tag" % field)
を使用して文字列を含むXPathのセレクターを取得するために使用され、データはすでにそれは、HTML item
上のXPathセレクタを使用して使用してテキストを保存することが見出されていない
res[field] = item.xpath(selector[:path]).inner_text
次に生成されたハッシュを次の反復で使用するために戻します。
def get_field_data_from(item,data)
Fields.inject(data) do |res,field|
selector = send("get_%s_tag" % field)
unless !selector || res[field]
begin
res[field] = item.xpath(selector[:path]).inner_text
rescue Exception => e
puts "Error for field: %s" % field
raise e
end
end
res
end
end
どういうわけか、それは
res[field] = item.xpath(selector[:path]).inner_text
をやっているようだ、それだけでは与えられたアイテムリストではなく、すべてのアイテムを検索するようです。やって
:
puts item.xpath(selector[:path]).inner_text
戻り、複数の結果
を私は実際にすべてのhtml_listingsをループではないよ、私は原因であることやっている知っています。フィールドデータ
yield fd
がget_listing
にある場合は、break
を実行するので、1回だけ行います。
私は何が起こっているのか分からないようです。他の誰かがそれを見ますか?
サブノードで行った場合でもですか? – Thermatix
はい、xpathはそのように混乱しています。 – akuhn
wtf?すべてのサブノードの兄弟に対してそれを実行しようとしている場合、サブノード上のxpathを実行するポイントは何ですか?それは意味がありません。何らかの形で、ありがとうございました。 – Thermatix