【问题标题】:How do I transfer Data using Web Server/TCPsockets in Ruby?如何在 Ruby 中使用 Web 服务器/TCPsockets 传输数据?
【发布时间】:2021-08-23 11:49:30
【问题描述】:

我有一个 ruby​​ 中的数据抓取工具,用于检索文章数据。

我团队中的另一个开发人员需要我的爬虫来启动他可以向其发出请求的 webServer,以便他可以将数据导入到他构建的节点应用程序中。

作为一名大三学生,我不明白以下内容:

a) Rails 中是否有适当的约定告诉我将 scraper.rb 文件放在哪里

b) 正确放置该文件后,我将如何让服务器接受与 scrapedData 的连接

c)端口、套接字和路由之间的关系(功能上)是什么

我知道这可能是一个“菜鸟问题”,但老实说我不知道​​。

有人可以把它分解一下吗?

我已经:

i) 设置 server.rb 文件并将其链接到 localhost:2000 但我不确定如何创建正确的路由或连接,以允许某人使用 Postman 作为有效路由并连接到我的数据。

require 'socket'
require 'mechanize'
require 'awesome_print'

port = ENV.fetch("PORT",2000).to_i
    server = TCPServer.new(port)
        puts "Listening on port #{port}..."
        puts "Current Time : #{Time.now}"

loop do
    client = server.accept
    client.puts "= Running Web Server ="
    general_sites = [
        "https://www.lovebscott.com/",
        "https://bleacherreport.com/",
        "https://balleralert.com/",
        "https://peopleofcolorintech.com/",
        "https://afrotech.com/",
        "https://bossip.com/",
        "https://www.itsonsitetv.com/",
        "https://theshaderoom.com/",
        "https://shadowandact.com/",
        "https://hollywoodunlocked.com/",
        "https://www.essence.com/",
        "http://karencivil.com/",
        "https://www.revolt.tv/"
        
    ]     
    holder=[]
    agent = Mechanize.new
    general_sites.each do |site|
        page=agent.get(site);
        newRet = page.search('a')
            newRet.each do |e|
                data = e.attr('href').to_s
                if(data.length > 50)
                    holder.push(data)
                end
            end
 pp holder.length.to_s + " [ posts total] ==> Now Scraping -->  " + site

    end
        client.write(holder)
    client.close
end

【问题讨论】:

    标签: ruby-on-rails tcpclient rails-routing tcpsocket


    【解决方案1】:

    在 Rails 中,您无需手动启动 Web 服务器,而是使用 rackup、unicorn、puma 或任何其他兼容的应用程序服务器

    Rails 本身从不直接与 HTTP 客户端“对话”,它只是一个特定的应用程序,它公开了与机架兼容的 API(基本上有一个响应 call(hash) 并返回 [integer, hash, enumerable_of_strings] 的对象);应用服务器将从 unix/tcp 套接字获取数据并调用您的应用程序。

    如果您想将您的抓取工具公开给外部消费者(只要它足够快),您可以创建一个控制器,其方法是接受一些数据、运行抓取工具并最终以某种结构化方式呈现抓取结果。然后在路由器中将一些 URL 连接到控制器方法。

    # config/routes.rb
    
    post 'scrape/me', to: 'my_controller#scrape'
    
    # app/controllers/my_controller.rb
    class MyController < ApplicationController
      def scrape
        site = params[:site]
        results = MyScraper.run(site)
        render json: results
      end
    end
    

    然后使用简单的POST yourserver/scrape/me?site=www.example.com 即可取回您的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      相关资源
      最近更新 更多