清洁刮擦的<一href>导轨



我已经从网站上刮了数据,并使用以下代码将其输入数组:

  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])

这使您可以安全地插入撇号和其他特殊字符。

最新更新