如何解决如何使用nokogiri在Wikitable中刮出字符文字?
我正在用ruby写一个方法,使用nokogiri刮取Wikitable的每个字母。此方法在我的Scraper类中。我只想要“字母”行中的字符。
到目前为止,这是我的代码:
def self.scrape_tables
url = "https://en.wikipedia.org/wiki/English_alphabet"
doc = HTTParty.get(url)
parsed_doc = Nokogiri::HTML(doc)
# capture each row
rows = parsed_doc.css('table.wikitable tr')
letters = rows.css('td a')
# add each letter to letters_array
letters_array = []
letters.map do |letter|
letter_name = letter.name
letters_array.push(letter)
end
binding.pry
end
当我在binding.pry中键入以下内容时,看来我正在抓取正确的标签
puts letters
一旦我弄清楚了如何选择字符,那么我将能够适当地填充letters_array。
.css选择器方法中是否缺少某些内容?谢谢!
干杯
解决方法
代码中有一个小错误,它是letter
而不是letter_name
推送的。
这应该有效:
def self.scrape_tables
url = "https://en.wikipedia.org/wiki/English_alphabet"
doc = HTTParty.get(url)
parsed_doc = Nokogiri::HTML(doc)
# capture each row
rows = parsed_doc.css('table.wikitable tr')
letters = rows.css('td a')
# add each letter to letters_array
letters_array = []
letters.map do |letter|
letter_name = letter.name
letters_array.push(letter_name)
end
end
如果要获取标签内的实际文本值,则需要执行letter_name = letter.text
更新以获取第一列中的所有字母:
要从第一列获取所有唯一值,需要使用first-child
,并且您需要强制td元素具有标签,否则应
包括一些包含引用的rowspan行。
parsed_doc.css('table.wikitable tr td:first-child > a').map(&:text)
=> ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。