【问题标题】:How can I get the search result (in html) for a given keyword and iterate it for all search result pages in Talend?如何获取给定关键字的搜索结果(以 html 格式)并针对 Talend 中的所有搜索结果页面对其进行迭代?
【发布时间】:2023-03-22 02:04:02
【问题描述】:

我有一个工作流程,可以获取用户在keywords.csv 中指定的关键字。然后,它开始对带有作为搜索 url 的一部分迭代的关键字的页面进行搜索查询。这在以前很容易,因为我可以使用 url 参数li=100000 在一个页面上显示所有结果。他们改变了它,所以我必须获取单个页面并从那里提取它。

问题是,我是 talend 的新手,从同事那里得到了这个工作流程。这是概述,执行旧的 li=100000 并将所有结果写入单独的文本文件(keyword_1.txt、keyword_2.txt、....):

这是来自工作门户网站 absolventa 的示例查询:

http://www.absolventa.de/stellenangebote?query%5Bcity%5D=&query%5Bradius%5D=100&query%5Btext%5D=SAP&utf8=%E2%9C%93

我现在的问题是——如何在 talend 中添加函数来抓取 page1,然后抓取所有指定关键字的 page 2。并将其添加到我的流程中。请解释低级别,因为我是 Talend 的新手。

非常感谢您!

【问题讨论】:

    标签: java parsing talend web-crawler


    【解决方案1】:

    您需要使用 tLoop 组件集来使用 for 循环来循环所有可能的页面。

    因此,您希望在 tFlowToIterate 组件之间连接 tLoop,然后将循环迭代变量连接到您的 URL 中,如下所示:

    "http://www.absolventa.de/stellenangebote?page=" +
    ((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) +
    "&query%5Bcity%5D=&query%5Bradius%5D=100&query%5Btext%5D=SAP&utf8=%E2%9C%93"
    

    我不确定当页面什么都不返回时如何让它结束(您需要一个 while 循环,该条件可以在处理中的循环后设置)但是如果您只是将输出文件设置为 append 然后如果没有返回任何内容,那么它不会向文件添加任何内容。您仍然会遇到一个问题,即您需要将 tLoop 组件中的循环数量设置为足够高以覆盖任何可能发生的情况,但这会产生大量毫无意义的请求来获取那些空页面。

    您也许可以通过一些额外的努力将其改造成一个 while 循环,但我在这方面没有太多经验。

    【讨论】:

    • 谢谢!我正在考虑使用 tExtractRegEx 来确定何时停止迭代页面......虽然我还不熟悉 RegEx
    • 问题将是您必须进行处理以获取您正在捕获的作业条目,并且当它没有捕获任何内容时必须将其传递给 tLoop 组件。如果 tLoop 和处理部分在同一个子作业中,这可能是可行的,但我必须做更多的工作来探索这条途径。
    • 是的,这就是我现在要走的路。感谢您对这一点的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多