类名含空格导致Nokogiri无法定位ForexFactory日历表格
解决Nokogiri定位ForexFactory日历表格的问题
错误原因分析
你的代码存在两个核心问题:
- 选择器语法错误:直接写
'calendar__table '会被Nokogiri当作标签名解析,而非类选择器——类选择器必须以.开头。 - 冗余空格处理误区:HTML中class属性的首尾空格属于冗余内容,Nokogiri解析时会自动忽略,无需在选择器中保留。
正确定位方案
以下两种方式均可正确定位目标表格:
方案1:简洁类选择器(推荐)
直接使用类名选择器,Nokogiri会自动处理class属性的首尾空格:
table = doc.at('.calendar__table')
方案2:精确属性匹配(可选)
如果需要严格匹配带空格的class属性值,可使用属性选择器:
table = doc.at('table[class="calendar__table "]')
修正后的完整代码
require "nokogiri" require "csv" require "open-uri" url1 = "https://www.forexfactory.com/calendar?day=Jan5.2023" html = URI.open(url1) doc = Nokogiri::HTML(html) # 定位目标表格 table = doc.at('.calendar__table') if table # 提取表格内容示例:遍历所有行并输出单元格文本 table.css('tr').each do |row| cells = row.css('td').map { |cell| cell.text.strip } puts cells.inspect end else puts "未找到目标表格" end
补充说明
doc.at()方法返回匹配到的第一个元素,若需获取所有匹配元素可改用doc.css()。- 爬取ForexFactory数据时需注意网站的反爬机制,避免频繁请求导致IP被封禁。
内容的提问来源于stack exchange,提问作者junkone
相关产品推荐
相关产品推荐

