如何将这两个条件块代码集成到Ruby中?

如何将这两个条件块代码集成到Ruby中?,ruby,nokogiri,mechanize,Ruby,Nokogiri,Mechanize,如果我的代码没有这两个条件,我如何集成这两个条件?我的代码已经开始工作了,但它会刮除所有行(非粗体和粗体值),而不会刮除标题属性字符串 doc = Nokogiri::HTML(html) doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row| puts row.at_xpath('td[3]/text()') end 条件1:: doc = Nokogiri::HTML(html) doc.xpath('//

如果我的代码没有这两个条件,我如何集成这两个条件?我的代码已经开始工作了,但它会刮除所有行(非粗体和粗体值),而不会刮除标题属性字符串

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end

条件1::

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end

条件2::

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
doc     = Nokogiri::HTML(html)
numbers = doc.xpath('//p[@title]').collect { |p| p[:title].gsub(/[^\d]/, '') }

我的代码:

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
doc = Nokogiri::HTML(search_result.body)
rows = doc.css("table.articulos tr")
i = 0
details = rows.each do |row|
  detail = {}  
  [
    [:sku, 'td[3]/text()'],
    [:desc, 'td[4]/text()'],
    [:qty, 'td[5]/text()'],
    [:qty2, 'td[5]/p/b/text()'],
    [:price, 'td[6]/text()']
  ].each do |name, xpath|
    detail[name] = row.at_xpath(xpath).to_s.strip
  end
  i = i + 1
  detail
end
  doc = Nokogiri::HTML(search_result.body)
  rows = doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]')
  i = 0
  details = rows.each do |row|
    detail = {}  
    [
      [:sku, 'td[3]/text()'],
      [:desc, 'td[4]/text()'],
      [:stock, "td[5]/p[@title]"],
      [:price, 'td[6]/text()']
    ].each do |name, xpath|
        detail[name] = row.at_xpath(xpath).to_s.strip

      end
    i = i + 1
    if detail[:sku] != ""
          price = detail[:price].split

          if price[1] == "D"
              currency = 144
          else
              currency = 168
          end
          stock = detail[:stock].gsub(/[^\d]/, '-')
          cost = price[0].gsub(",", "").to_f
  end
第二次尝试:

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
doc = Nokogiri::HTML(search_result.body)
rows = doc.css("table.articulos tr")
i = 0
details = rows.each do |row|
  detail = {}  
  [
    [:sku, 'td[3]/text()'],
    [:desc, 'td[4]/text()'],
    [:qty, 'td[5]/text()'],
    [:qty2, 'td[5]/p/b/text()'],
    [:price, 'td[6]/text()']
  ].each do |name, xpath|
    detail[name] = row.at_xpath(xpath).to_s.strip
  end
  i = i + 1
  detail
end
  doc = Nokogiri::HTML(search_result.body)
  rows = doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]')
  i = 0
  details = rows.each do |row|
    detail = {}  
    [
      [:sku, 'td[3]/text()'],
      [:desc, 'td[4]/text()'],
      [:stock, "td[5]/p[@title]"],
      [:price, 'td[6]/text()']
    ].each do |name, xpath|
        detail[name] = row.at_xpath(xpath).to_s.strip

      end
    i = i + 1
    if detail[:sku] != ""
          price = detail[:price].split

          if price[1] == "D"
              currency = 144
          else
              currency = 168
          end
          stock = detail[:stock].gsub(/[^\d]/, '-')
          cost = price[0].gsub(",", "").to_f
  end
股票,而不是只是刮标题字符串,它刮整个段落

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
<p-style="margin-top:-0px;-margin-bottom:0px;-cursor:hand"-title="2-en-su-sucursal"><b>10</b></p>
10

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end

当我只需要标题属性中的2时,以下是我未经测试的修复尝试:

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
doc = Nokogiri::HTML(search_result.body)
rows = doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]')
i = 0
details = rows.each do |row|
  detail = {}  
  [
    [:sku, 'td[3]/text()'],
    [:desc, 'td[4]/text()'],
    [:stock, 'td[5]/p[@title]'],
    [:price, 'td[6]/text()']
  ].each do |name, xpath|
    if name == :stock
      detail[name] = row.at_xpath(xpath).collect { |p| p[:title].gsub(/[^\d]/, '') }
    else
      detail[name] = row.at_xpath(xpath).to_s.strip
    end
  end
  i = i + 1
  detail
end

这是我的工作代码。也许需要一点清洁,但它是有效的。结果是正确的,但我得到很多零

doc = Nokogiri::HTML(html)
doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row|
puts row.at_xpath('td[3]/text()')
end
doc = Nokogiri::HTML(search_result.body)
rows = doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]')
i = 0
details = rows.each do |row|
  detail = {}  
  [
    [:sku, 'td[3]/text()'],
    [:desc, 'td[4]/text()'],
    [:stock, "td[5]/p/@title"],
    [:price, 'td[6]/text()']
  ].each do |name, xpath|
      detail[name] = row.at_xpath(xpath).to_s.strip
    end
  i = i + 1
  if detail[:sku] != ""
        price = detail[:price].split

        if price[1] == "D"
            currency = 144
        else
            currency = 168
        end
        stock = detail[:stock].each do |anchor|
                puts anchor['title']
                end
        stock1 = stock.gsub(/[^\d]/, '')
        cost = price[0].gsub(",", "").to_f
end

我得到.collect的语法错误