【发布时间】:2014-10-01 23:40:02
【问题描述】:
我已经与 Nokogiri 合作了几天,我非常喜欢它。一切都运行良好,直到我需要抓取一个使用 data-reactid javascript 属性标签的网站。问题是 Nokogiri 似乎对这个网站使用的属性 id 格式感到困惑(几个句点、一些美元符号和一些其他无效的 xml/css 字符):
我需要抓取的一个例子是:
<td data-reactid=".3.3.1:$contract_23.$=1$dataRow:0.1">94.280</td>
我需要属性内的值 (94.280),其 id 为“.3.3.1:$contract_23.$=1$dataRow:0.1”
通常在 nokogiri 中,我们会通过执行以下操作来选择:
doc.css("type[attributename=attributeid]")
在我的例子中是:
doc.css("td[data-reactid=.3.3.1:$contract_23.$=1$dataRow:0.1]")
但无论我做什么来转义无效字符,它总是告诉我等号后面有一个无效字符:
上面代码的错误信息:
nokogiri-1.4.3.1/lib/nokogiri/css/parser.rb:78:in `on_error': unexpected '.3' after 'equal'
我试过了:
a) 将我的字符串定义为变量并强制转换为字符串
b) 用反斜杠转义 (.3.[...])
c) 用哈希作为前缀 (#.3.3[...])
d) 使用 cgi escapedString 转义它
e) 将其放在 '%{ }' 中,例如 '%{.3.3[...]}'
无论我做什么,我都会收到相同的消息(除了选项 e,它给了我一个完全不同的错误消息:
: no .<digit> floating literal anymore; put 0 before dot
你们能帮我用这样一个名字奇怪的属性获得正确的值吗?
【问题讨论】:
标签: ruby web-scraping nokogiri