我已经从网站上刮了数据,并使用以下代码将其输入数组:
def process_course_details(course_details)
details_array =[]
details_link = true
entry_link = true
details_info = {}
# Sets all data in hash
details_info[:url] = clean_link(course_details.search('div.coursedetails_programmeurl a'))
details_array.push(details_info)
print_details_info(details_info)
entry_link = course_details.search('ul.details_tabs').first
end
上面的代码存储要拉出的元素:
<a href="http://www.abdn.ac.uk/study/courses/undergraduate/C8R1/">View course details on provider's website</a>
,但我想清洁以下内容:
http://www.abdn.ac.uk/study/courses/undergraduate/C8R1/
或失败的删除撇号并具有以下操作:
<a href="http://www.abdn.ac.uk/study/courses/undergraduate/C8R1/">View course details on providers website</a>`
您可以使用诺科吉里(Nokogiri)提取HREF:
html = Nokogiri::HTML('<a href="http://www.abdn.ac.uk/study/courses/undergraduate/C8R1/">View course details on provider's website</a>')
html.xpath("//a/@href").to_s # => "http://www.abdn.ac.uk/study/courses/undergraduate/C8R1/"
基于您的评论:
存储其他数据时,我将我刮入数据库中的撇号 提供错误并停止它。一旦我清洗了撇号, 它不再是代码工作的数组的一部分,桌子是 创建。
db = SQLite3::Database.open('ahhh.sqlite3') db.execute "INSERT INTO aahah (uname, cname, duration, qualification, url, entry) VALUES ('#{@uni_name}', #{@course_name}', '#{@course_duration}', '#{@course_qual}', '#{@details_entry}', '#{@requirements}')"
您正在通过字符串插值插入值:
db.execute("INSERT INTO table_name (foo, bar) VALUES ('#{@foo}', '#{@bar}')")
显然,如果插值字符串包含撇号,则您的SQL字符串可能无效。更糟糕的是,此代码容易被SQL注入。
相反,您应该使用参数标记,让SQLite Gem处理逃逸:
db.execute("INSERT INTO table_name (foo, bar) VALUES (?, ?)", [@foo, @bar])
这使您可以安全地插入撇号和其他特殊字符。