ruby - 抓取嵌套跨度 Nokogiri
问题描述
我正在尝试抓取我最喜欢的食物的详细信息,我能够获得名称和价格,但事实证明,描述是一个挑战,因为文本嵌套在 span 中。我已经尝试过这种组合,但似乎没有给我描述。
任何帮助将不胜感激:
menu = doc.css('.menu-index-page__item-content').map do |menu|
meal_name = menu.at_css('.menu-index-page__item-title span[1]').text.strip
meal_price = menu.at_css('.menu-index-page__item-price').text.strip
meal_des = menu.css('p.menu-index-page__item-desc span[3]').text.strip.to_s
Event1.new meal_name,meal_price,meal_des end pp menu
返回
#<struct Event1
meal_name="chicken Burger",
meal_price="£3.95",
meal_des="">,
我试图抓取的 HTML 如下:
<div class="menu-index-page__item-content" data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent">
<h6 class="menu-index-page__item-title" data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.0"><span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.0.1">Chicken Burger</span></h6>
<p class="menu-index-page__item-desc" data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1"><span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0">
<span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0"><span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0.0"><span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0.0.0:$0">Chargrilled chicken thigh with</span>
<br data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0.0.0:$0br"><span data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0.0.$1">fresh herb olive oil mayonnaise.</span></span>
<span style="position:fixed;visibility:hidden;top:0;left:0;" data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.1.0.2">…</span></span></p>
<span class="menu-index-page__item-price" data-reactid=".1446l8bfnk0.3.5.0.4:$648324.2.$4885079.$menuItemContent.2">£3.55</span>
我想用新鲜的香草橄榄油蛋黄酱烤鸡腿。
作为描述,我不确定为什么 span[3] 没有给我任何结果。
解决方案
这对我有用:
# ...
menu = doc.css('.menu-index-page__item-content')
menu.map { |m| m.css('span')[2].text }
# => ["Chargrilled chicken thigh with\nfresh herb olive oil mayonnaise.\n…"]
推荐阅读
- google-cloud-dataproc - dataproc 作业提交失败并显示“未授权请求的资源”,缺少什么权限?
- progressive-web-apps - 是否可以构建一个将用户作为子域的渐进式 Web 应用程序 (PWA)?
- android-recyclerview - 带有 CollapsingToolbarLayout 的 Vertical Recyclerview 中的水平滚动 Recyclerview
- node.js - 如何使用 Firebase Cloud Functions 删除旧文件?
- javascript - 访问对象中的值(通过键作为变量)并合并到新对象?
- java - 如何对在号码前面或中间包含括号、+ 和 - 的国际电话号码进行排序
- linux - Ubuntu按GID删除组
- perl - 在 Perl 中丢弃本地时间的一秒
- git - 忘了做 git flow 功能启动;现在怎么办?
- r - 如何在 ggplot 中的 aes() 和本地 geom_xxx() 中手动设置颜色*有条件地*?