Changeset 867 for lang/lua

Show
Ignore:
Timestamp:
10/30/07 09:35:46 (13 months ago)
Author:
mattn
Message:

lang/lua/LuaScraper/luascraper.lua: modified that resolving absolute url path.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/lua/LuaScraper/luascraper.lua

    r866 r867  
    11local http = require("socket.http") 
     2local url = require("socket.url") 
    23local xml = require("xml") 
    34 
     
    78end 
    89-- not supported 
    9 function result(p) 
    10   return p 
     10function result(self) 
     11  self.name = "result" 
     12  return self 
    1113end 
    1214-- return scraper structure 
     
    1416  self.name = "scraper" 
    1517  -- scrape method 
    16   function self.scrape(url, ctx) 
     18  function self.scrape(uri, ctx) 
    1719    -- create http session and parse HTML 
    1820    if ctx == nil then 
     
    2022      local b, c = http.request { 
    2123        method = "GET", 
    22         url = url, 
     24        url = uri, 
    2325        sink = ltn12.sink.table(chunk) 
    2426      } 
     
    3941          for k1,v1 in pairs(ctx.doc:select(v.process.xpath)) do 
    4042            local newctx = {top=ctx.top, doc=v1} 
    41             self.res[#(self.res)+1] = v.process.scraper.scrape(url, newctx) 
     43            self.res[#(self.res)+1] = v.process.scraper.scrape(uri, newctx) 
    4244          end 
    4345        else 
     
    4951            elseif string.sub(attr, 1, 1) == "@" then 
    5052              attr = string.sub(attr, 2) 
    51               self.res[v.process.name] = node[1]:attribute(attr) 
     53              val = node[1]:attribute(attr) 
     54                          nname = node[1]:name() 
     55              if (nname == "img" and attr == "src") or (nname == "a" and attr == "href") then 
     56                  if string.sub(uri, -1) == "/" then 
     57                      val = url.absolute(uri, val) 
     58                  else 
     59                      val = url.absolute(uri + "/", val) 
     60                  end 
     61              end 
     62              self.res[v.process.name] = val 
    5263            end 
    5364          end