AppleScript:分隔符不起作用,并以制表符分隔URLS

时间:2012-07-03 13:33:17

标签: csv applescript html-parsing delimiter

我正在尝试获取今日报纸的金融时报网址列表。我通过从FT.com获取源代码,然后使用分隔符来解析html源代码来完成此操作,现在我尝试将每个URL保存为逗号分隔值文件(.txt扩展名)。

我已经能够解析html源代码了。但我的问题在于将网址保存为csv文件(或网址列表,以段落分隔)。

这是我的苹果:

on run

set query_url to "http://www.ft.com/uk-edition"
set query_url_source to do shell script "/usr/bin/curl " & quoted form of query_url

set p to query_url_source
set ex to extractBetweenLong(p, "><a href=\"/cms/s", ".html")

return ex

end run

--delimiters subroutine:

to extractBetweenLong(SearchText, startText, endText)
set tid to AppleScript's text item delimiters -- save them for later.
set AppleScript's text item delimiters to startText -- find the first one.
set liste to text items of SearchText
set AppleScript's text item delimiters to endText -- find the end one.
set extracts to {}
repeat with subText in liste
    if subText contains endText then
        copy text item 1 of subText to end of extracts
    end if
end repeat
set AppleScript's text item delimiters to tid -- back to original values.
return extracts
end extractBetweenLong

我的输出如下:

{“^!DOCTYPE html ... subs5”,“/ 0 / 0130d092-c473-11e1-9c1e-00144feabdc0”,“/ 0 / cb8a70a0-c469-11e1-a98c-00144feabdc0”,...,“ / 0 / 02eaa328-c468-11e1-9c1e-00144feabdc0" ,}

  • 我的第一个问题是为什么第一个字符串(^!DOCTYPE html ...)存在?我的delimiter子例程一定有问题,因为我的第一个'startText'分隔符不应包含“DOCTYPE ... subs5”(subs5 HTML选项卡以.html结尾),这可能表示我的子例程星

  • 第二,如何将每个网址保存为列表,以逗号或换行符分隔?我首先想在每个URL之前添加字符串:“www.ft.com/cms/s”,但我相信我可以自己解决这个问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

AppleScript的文本项分隔符定义在将字符串拆分为文本项列表时使用的子字符串,以及将文本项列表重新组合回字符串时使用的子字符串。

  1. 文本项分隔符只是定义字符串被分解的位置,而不是要保留或丢弃的片段。在您的脚本中,您可以丢弃提取处理程序中的第一个文本项,例如:

    设置侦听SearchText的其余文本项

  2. 获取文本项会产生字符串列表(文本项)。

  3. 正如您使用文本项分隔符将字符串分开一样,您可以在将各个部分放回原处时使用它们,例如在将列表强制回文本之前将文本项分隔符设置为逗号或换行符。 “www.ft.com/cms/s”部分也可以放在那里,虽然(如上面的#1),你还需要在第一个项目之前添加它,例如:
  4. set tempTID to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ("," & return & "www.ft.com/cms/s")
    set ex to ex as text
    set AppleScript's text item delimiters to tempTID
    return "www.ft.com/cms/s" & ex