Ruby on rails 从<;中的子节点提取文本;a>;通过xpath标记

Ruby on rails 从<;中的子节点提取文本;a>;通过xpath标记,ruby-on-rails,ruby,xpath,nokogiri,Ruby On Rails,Ruby,Xpath,Nokogiri,我有一些用于提取图像url和图像名称(位于a标记中)的数据抓取代码。编写的代码如下所示: BASE = 'http://antwrp.gsfc.nasa.gov/apod/' f = open 'http://antwrp.gsfc.nasa.gov/apod/archivepix.html' html_doc = Nokogiri::HTML(f.read) html_doc.xpath('//b//a')[0..10].each do |element| imgurl = BASE +

我有一些用于提取图像url和图像名称(位于a标记中)的数据抓取代码。编写的代码如下所示:

BASE = 'http://antwrp.gsfc.nasa.gov/apod/'

f = open 'http://antwrp.gsfc.nasa.gov/apod/archivepix.html'
html_doc = Nokogiri::HTML(f.read)
html_doc.xpath('//b//a')[0..10].each do |element|
  imgurl = BASE + element.attributes['href'].value
  imgname = element.attributes['innerText']
  puts imgname
  doc = Nokogiri::HTML(open(imgurl).read)
  doc.xpath('//p//a//img').each do |elem|
    small_img = BASE + elem.attributes['src'].value
    puts small_img
  end
end
当我运行该程序时,我得到以下输出:

http://antwrp.gsfc.nasa.gov/apod/image/1308/twolines_yen_960.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/perseids_vangaal_960.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/phas_jpl_960.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/m74_hubble_960.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/tafreshiIMG_4098Trail-s900.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/Albrechtsberg_Perseid2012-08-12_voltmer900.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/ngc3370_hst_900.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/auroraemeteors_boardman_1770.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/cone_noajgendler_960.jpg

http://antwrp.gsfc.nasa.gov/apod/image/1308/ioplus_galileo_960.jpg
链接之间的线条是我希望图像名称出现的地方(例如,第一张图像是“来自台湾的卫星集”)。我有一种感觉,我无法获得该名称的原因是因为它是一个子节点,而我没有访问它。有人知道我应该如何修改imgname变量以返回图像名称吗?

那怎么办

html_doc.xpath('//b//a')[0..10].each do |element|
  imgurl = BASE + element.attributes['href'].value
  #imgname = element.attributes['innerText']
  imgname = element.content
  puts imgname
  ...
end
element.text
element.internal\u text
在您的案例中应该提供相同的输出

html_doc.xpath('//b//a')[0..10].each do |element|
  imgurl = BASE + element.attributes['href'].value
  #imgname = element.attributes['innerText']
  imgname = element.content
  puts imgname
  ...
end

element.text
element.internal\u text
在您的案例中应提供相同的输出

尝试imgname=element.value标记内的文本实际上不是属性。不起作用,方法“.value”未定义。Paul T的解决方案得到了答案,我正在寻找的是try imgname=element.value标记中的文本实际上不是一个属性。不起作用,方法“.value”未定义。Paul T的解决方案得到了我想要的答案