【问题标题】:imacros Extract all text without hrefimacros 提取所有没有href的文本
【发布时间】:2017-08-18 05:10:26
【问题描述】:

需要帮助以提取 text1、text2、text3(我的意思是所有文本,有时直到类别中的 text9)

<h4>Category:</h4>
<p><a href="">text1</a>, <a href="">text2</a>, <a href="">text3</a></p>

我的 imacros 代码只提取 text1

TAG POS=R1 TYPE=A ATTR=TXT:* EXTRACT=TXT

问:如何提取类别中的所有文本?

谢谢

【问题讨论】:

  • 提取后你想对数据做什么?将其存储在 csv 文件中?
  • 可以选择 JavaScript 吗?如果你不知道你会得到多少 texts,你可以只提取 p 并在 JavaScript 中解析结果:TAG POS=R1 TYPE=P ATTR=* EXTRACT=HTM 产生 &lt;p style="outline: 1px solid blue;"&gt;&lt;a href=""&gt;text1&lt;/a&gt;, &lt;a href=""&gt;text2&lt;/a&gt;, &lt;a href=""&gt;text3&lt;/a&gt;&lt;/p&gt;
  • @NarenMurali 是的,使用 SAVEAS TYPE=EXTRACT FOLDER=D:\ FILE=data3.csv 存储在 CSV 中,但我只需要在示例中存储 text = text1,text2,text3。
  • @PinkiePie,嗨,我需要结果 = text1,text2,text3 的示例。在您的代码结果中

    text1, text2, text3

    ,谢谢

标签: imacros


【解决方案1】:

要扩展 JavaScript 注释,您可以这样做:

ExtractCategory.js 内容

// Play the macro reading the category data
iimPlay("foo.iim");
// Get the last extracted value, i.e. the p content
var pContent = iimGetExtract();
// Parse the p using regex, first find a tag pairs and then drop the surrounding a tags
var result = pContent.match(/<a(.*?)<\/a>/g).map(function(val){
   return val.replace(/<\/?a>/g,'').replace(/<a.+>/g,'');
});
// Pass the generated String to another macro to work with it
iimSet("passed_var", result);
iimPlay("bar.iim");

ExtractCategory.js 旁边的 foo.iim 内容

'Your previous code here, line #2 is just to find the right p in line #3 in a mockup html
TAG POS=1 TYPE=H4 ATTR=* 
TAG POS=R1 TYPE=P ATTR=* EXTRACT=HTM

ExtractCategory.js 旁边的 bar.iim 内容

'Do whatever with the passed variable containing your formatted String
'This is just an output to show it
PROMPT {{passed_var}}

当您运行 ExtractCategory.js 时,它将运行您的 foo.iim 代码以提取 p 内容,并使用正则表达式对其进行解析(这里可能要小心,具体取决于您期望的文本可能会中断),然后将生成的字符串传递给另一个宏以随心所欲地处理它。

运行这个你的结果是 text1,text2,text3 根据需要。

如果您需要有关如何使用它们的更多信息,请阅读 http://wiki.imacros.net/iimSet()http://wiki.imacros.net/iimPlay()

【讨论】:

    【解决方案2】:

    这段代码,将提取P标签内所有A标签中的数据,但是你需要做一个小设置,我使用XPATH来获取A标签的路径。

    请安装:

    XPath Checker By Brian Slesinsky

    how to find the xpath of an element(我会推荐 chrome 控制台方法)

    你需要右键点击a标签并给出View XPATH,这会给你一个类似XPATH的

    /x:html/x:body/x:p/x:a[2]
    

    然后,在你得到这个X路径后,你需要将它粘贴到Xpath值中(注意你需要在粘贴之前从上面的XPATH中删除x:。还要注意[中的数字Xpath 的 ] 表示子编号,因为我们使用 !LOOP 设置标签的行号 我们忽略 [2]),请参考下面的代码,我对上面的 Xpath 做了同样的事情

    注意: 1. 请根据您要提取的A标签数量循环imacros代码。 2.你还需要更新SAVEAS行的文件夹属性,到你的桌面路径。

    代码:

    SET !LOOP 1
    SET !ERRORIGNORE YES
    TAG XPATH=(/html/body//p/a)[{{!LOOP}}] EXTRACT=TXT
    SAVEAS TYPE=EXTRACT FOLDER=C:/Users/Test/Desktop/ FILE=output.csv
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2021-02-02
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多