我正在尝试(eval):1:尝试刮取instagram时出现无效的Unicode代码点错误

时间:2018-07-11 08:29:38

标签: ruby eval nokogiri

我正在尝试从instagram抓取数据。这是我的代码

require 'open-uri'
require 'nokogiri'
require 'json'
require "unicode/emoji"

def get_html
    url = 'https://www.instagram.com/muriithi_kabogo/'
    html = open(url)

end

def pass_data
    html = get_html
    doc = Nokogiri::HTML(html)
end

def get_data
    profiles = []
    body  = pass_data.at('body')
    script = body.at('script').text
    myText = script
    json_object_data = eval(myText)

end


get_data()

当我尝试将文本更改为json格式时,出现错误:

(eval):1: invalid Unicode codepoint (SyntaxError)
usinessmen #beautiful #smile\ud83d\ude0a #teambringit #shebr

如何克服此错误?

1 个答案:

答案 0 :(得分:1)

JSON像JavaScript一样,使用UCS2编码,而Ruby则使之窒息。

请勿使用evil。一方面,Ruby应该将\ud83d\ude0a检测为无效的代码点;另一方面,这是一个安全漏洞;最后,它会使您的代码变慢。

使用JSON.parse,它更安全,更快捷,并且知道如何处理UCS2:

require 'json'
json_str = '"usinessmen #beautiful #smile\ud83d\ude0a #teambringit #shebr"'
JSON.parse(json_str)
# => "usinessmen #beautiful #smile #teambringit #shebr"