さて、これは私のHTMLです。
<div class = 'div-of-all-names'>
<div class='best-first-name'>
<span itemprop='name'> Alexander </span>
</div>
</div>
このハッシュはRubyプログラムにあります。
URL = "http://www.xxx.com/xxxxxxxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxx"
agent = Mechanize.new
page = agent.get(URL)
patterns = {1 => ['at("div.div-of-all-names")'],
2 => ['at("div.best-first-name")'] ,
3 => ['search("span[@itemprop='name']")']}
# Selecting those keys that is a number and sorting
p = patterns.keys.select{|i| /[0-9]/ =~ i.to_s }.sort
# p = [1,2,3]
p.each do |i|
p[i].each do |j|
out = page.send(j)
if !(out.blank?)
page = out
p j
break
end
end
end
name = page.inner_text
p name
質問:
1.のこぎりオブジェクトにルビーの「送信」を使用できませんか? なぜなら、ルビーハッシュを使用して、実際の「search」または「at」を「class」、「id」、「itemprop」、またはハッシュ内の任意のhtml属性をレベル1、2、および3として格納できるからです。レベルとして保存されている場合は、「i」または「j」のループ変数としてそれらから取得し、Nokogiriオブジェクトで「.send(j)」を使用します。
これを試してみたところ、このエラーが発生しました。
1.9.3p385 :238 > a
=> "at(\"div.our_price\")"
1.9.3p385 :239 > page.send(a)
NoMethodError: undefined method `at("div.our_price")' for #<Mechanize::Page:0xb2ba6dc>
from (irb):239
2.「at」を使用している場合、クラスのみを操作できますか?好き、
"page.at('span.humble')" **means** <-span-class ='humble'> Humble <-/-span> **then what about** <-span-id='humble'> Humble <-/-span>