如何使用 nokogiri 抓取 wikitable 中的字符文字?
How do I scrape the character literal in a wikitable using nokogiri?
我正在 ruby 中编写一个方法,使用 nokogiri 抓取 wikitable 的每个字母。这个方法在我的Scraper class。我只想要 'Letter' 行中的字符。
到目前为止,这是我的代码:
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
我可以在 标签中看到我想要的所有字符。但是,它不是字面字符。
一旦我弄清楚如何 select 这个字符,我就可以适当地填充 letters_array。
我在 .css selector 方法中遗漏了什么吗?谢谢!
干杯,
代码中有一个小错误,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
如果你想获取a标签内的实际文本值,你需要做letter_name = letter.text
更新以获取第一列中的所有字母:
要从第一列中获取所有唯一值,需要使用 first-child
,并且您需要强制 td 元素具有标签,否则它
包括一些行跨度包含引用的行。
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"]
我正在 ruby 中编写一个方法,使用 nokogiri 抓取 wikitable 的每个字母。这个方法在我的Scraper class。我只想要 'Letter' 行中的字符。
到目前为止,这是我的代码:
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
我可以在 标签中看到我想要的所有字符。但是,它不是字面字符。
一旦我弄清楚如何 select 这个字符,我就可以适当地填充 letters_array。
我在 .css selector 方法中遗漏了什么吗?谢谢!
干杯,
代码中有一个小错误,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
如果你想获取a标签内的实际文本值,你需要做letter_name = letter.text
更新以获取第一列中的所有字母:
要从第一列中获取所有唯一值,需要使用 first-child
,并且您需要强制 td 元素具有标签,否则它
包括一些行跨度包含引用的行。
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"]