0

我正在尝试获取今日报纸的金融时报 URL 列表。我通过从 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...) 存在?我的定界符子例程一定有问题,因为我的第一个“startText”定界符不应包含“DOCTYPE ... subs5”(subs5 HTML 选项卡以 .html 结尾),因此这可能表明我的子例程星号

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

感谢您提前提供帮助。

4

1 回答 1

1

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

  1. 文本项分隔符仅定义字符串在哪里被分解,而不是保留或丢弃哪些部分。在您的脚本中,您可以使用以下内容丢弃提取处理程序中的第一个文本项:

    将列表设置为 SearchText 的其余文本项

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

  3. 就像您使用文本项分隔符将字符串分开一样,您可以在将各个部分重新组合在一起时使用它们,例如在将列表强制回文本之前将文本项分隔符设置为逗号或换行符。“www.ft.com/cms/s”部分也可以放在那里,虽然(如上面的#1),您还需要在第一项之前添加它,例如:
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
于 2012-07-03T14:40:13.867 回答