【问题标题】:JSoup and Javascript codeJSoup 和 Javascript 代码
【发布时间】:2014-09-01 09:14:57
【问题描述】:

我的 HTML 代码中有一个 Javascript。我想浏览以“Doc”结尾的链接。在这个 HTML 中只有一个链接,称为 SunnydataDoc。所以我想在这个页面上搜索这个字符串,如果存在任何以“Doc”结尾的链接,我想在这些页面中进一步向下导航。 你能帮我解决这个问题吗?我听说我可以将正则表达式和匹配方法与 Jsoup 结合使用。 这是我的代码。

<script>
    var data = {"totalRecords": 2, "sort": "name", "startIndex": 0, "dir": "asc", "records": [{"raw_name": "samia/export/sunnydata", "last_changeset": "\n  <div>\n      <pre><a title=\"ownerID:\n\nAdded tag V2.11.d50.mkt.001 for changeset 56e10a4864ff\" class=\"tooltip\" href=\"/samia/export/sunnydata/changeset/f602409eba261d749d23dc75551b2959425dfa8d\">r17:f602409eba26</a></pre>\n  </div>\n", "atom": "\n    <a title=\"Subscribe to samia/export/sunnydata atom feed\" href=\"/samia/export/sunnydata/feed/atom?api_key=e214ebea2335318bee1460a1fd33725ab3e1002e\"><i class=\"icon-rss-sign\"  style=\"color: #fa9b39\"></i></a>\n", "owner": "ownerID (Owner)", "rss": "\n    <a title=\"Subscribe to samia/export/sunnydata rss feed\" href=\"/samia/export/sunnydata/feed/rss?api_key=e214ebea2335318bee1460a1fd33725ab3e1002e\"><i class=\"icon-rss-sign\" style=\"color: #fa9b39\"></i></a>\n", "name": "\n    \n  <div style=\"white-space: nowrap; }\">\n        <a href=\"/samia/export/sunnydata\">\n\n        <span title=\"Mercurial repository\"><i class=\"icon-hg\" style=\"color: #316293; font-size: 14px;\"></i></span>\n\n      <span style=\"margin: 0px 8px 0px 8px\"></span>\n    Sunnydata\n    </a>\n  </div>\n", "last_rev_raw": 17, "state": "\n  <div>\n        <div class=\"btn btn-mini btn-success disabled\">Created</div>\n  </div>\n", "menu": "\n  <ul class=\"menu_items hidden\">\n\n    <li style=\"border-top:1px solid #003367;margin-left:18px;padding-left:-99px\"></li>\n    <li>\n       <a title=\"Summary\" href=\"/samia/export/sunnydata\">\n       <span class=\"icon\">\n           <i class=\"icon-file-text\"></i>\n       </span>\n       <span>Summary</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Changelog\" href=\"/samia/export/sunnydata/changelog\">\n       <span class=\"icon\">\n           <i class=\"icon-list-alt\"></i>\n       </span>\n       <span>Changelog</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Files\" href=\"/samia/export/sunnydata/files/tip/\">\n       <span class=\"icon\">\n           <i class=\"icon-file-alt\"></i>\n       </span>\n       <span>Files</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Fork\" href=\"/samia/export/sunnydata/fork\">\n       <span class=\"icon\">\n           <i class=\"icon-code-fork\"></i>\n       </span>\n       <span>Fork</span>\n       </a>\n    </li>\n  </ul>\n", "desc": "GHU Sunnydataimport", "last_change": "\n  <span class=\"tooltip\" date=\"2014-08-21 18:49:50\" title=\"Thu, 21 Aug 2014 18:49:50\">10 days and 16 hours ago</span>\n"}, {"raw_name": "samia/export/sunnydatadoc", "last_changeset": "\n  <div>\n      <pre><a title=\"ownerID;lt;owneremail;gt;:\n\nChangedokumentation\" class=\"tooltip\" href=\"/samia/export/sunnydataDoc/changeset/9ed1679c7a35b76e1402b540cee38000461fdfdd\">r0:9ed1679c7a35</a></pre>\n  </div>\n", "atom": "\n    <a title=\"Subscribe to samia/export/sunnydataDoc atom feed\" href=\"/samia/export/sunnydataDoc/feed/atom?api_key=e214ebea2335318bee1460a1fd33725ab3e1002e\"><i class=\"icon-rss-sign\"  style=\"color: #fa9b39\"></i></a>\n", "owner": "ownerID (Owner)", "rss": "\n    <a title=\"Subscribe to samia/export/sunnydataDoc rss feed\" href=\"/samia/export/sunnydataDoc/feed/rss?api_key=e214ebea2335318bee1460a1fd33725ab3e1002e\"><i class=\"icon-rss-sign\" style=\"color: #fa9b39\"></i></a>\n", "name": "\n    \n  <div style=\"white-space: nowrap; }\">\n        <a href=\"/samia/export/sunnydataDoc\">\n\n        <span title=\"Mercurial repository\"><i class=\"icon-hg\" style=\"color: #316293; font-size: 14px;\"></i></span>\n\n      <span style=\"margin: 0px 8px 0px 8px\"></span>\n    SunnydataDoc\n    </a>\n  </div>\n", "last_rev_raw": 0, "state": "\n  <div>\n        <div class=\"btn btn-mini btn-success disabled\">Created</div>\n  </div>\n", "menu": "\n  <ul class=\"menu_items hidden\">\n\n    <li style=\"border-top:1px solid #003367;margin-left:18px;padding-left:-99px\"></li>\n    <li>\n       <a title=\"Summary\" href=\"/samia/export/sunnydataDoc\">\n       <span class=\"icon\">\n           <i class=\"icon-file-text\"></i>\n       </span>\n       <span>Summary</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Changelog\" href=\"/samia/export/sunnydataDoc/changelog\">\n       <span class=\"icon\">\n           <i class=\"icon-list-alt\"></i>\n       </span>\n       <span>Changelog</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Files\" href=\"/samia/export/sunnydataDoc/files/tip/\">\n       <span class=\"icon\">\n           <i class=\"icon-file-alt\"></i>\n       </span>\n       <span>Files</span>\n       </a>\n    </li>\n    <li>\n       <a title=\"Fork\" href=\"/samia/export/sunnydataDoc/fork\">\n       <span class=\"icon\">\n           <i class=\"icon-code-fork\"></i>\n       </span>\n       <span>Fork</span>\n       </a>\n    </li>\n  </ul>\n", "desc": "GHU Sunnydataimport (Dokumentation)", "last_change": "\n  <span class=\"tooltip\" date=\"2014-04-25 11:03:45\" title=\"Fri, 25 Apr 2014 11:03:45\">4 months and 6 days ago</span>\n"}]};
    var myDataSource = new YAHOO.util.DataSource(data);
    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;

所以在这个例子中我有这个链接:href=\"/samia/export/sunnydataDoc\"。我想获取此链接并使用我的代码进入那里。

这是我的 Java 代码。

public class JScripttest {

public static void main(String[] args) throws IOException {

    Response res = Jsoup
            .connect(
                    "url")
            .data("username", "username", "password", "password")
            .method(Method.POST).execute();
    Map<String, String> loginCookies = res.cookies();
    Document doc = Jsoup.connect("url")
            .cookies(loginCookies).get();


    Element script = doc.select("href").last();

    Pattern p = Pattern.compile("href\s=\s"([^"]+Doc)""); // Regex for the value of the href
    Matcher m = p.matcher(script.html()); // you have to use html here and NOT text! Text will drop the 'href' part

    while( m.find() )
    {
        System.out.println(m.group()); 
        System.out.println(m.group(1));
    }

    }



private static void print(String msg, Object... args) {
    System.out.println(String.format(msg, args));
}

所以我在“Pattern....”行中出现错误

感谢收看。

【问题讨论】:

    标签: javascript html regex parsing jsoup


    【解决方案1】:

    此正则表达式为您提供以Doc 结尾的链接。我不确定您所说的“进入”是什么意思,但这应该对您有所帮助。第 1 组包含 URL。

    href\s*=\s*"([^"]+Doc)"
    

    Debuggex Demo

    在 Java 中正确转义 "

    Pattern p = Pattern.compile("href\\s*=\\s*\"([^\"]+Doc)\"");
    

    【讨论】:

    • 我为此使用了模式和匹配器。那是正确的吗?我得到错误。 ` 模式 p = Pattern.compile(href\s*=\s*"([^"]+Doc)"); 匹配器 m = p.matcher(script.html());
    • 您似乎混淆了 Java 和 JavaScript。尽管名称上不幸的相似,但它们彼此之间几乎没有关系。你的&lt;script&gt; 标签让我觉得你在网站上使用JavaScript,但Pattern p = Pattern.compile() 是Java。在这里查看有关 JavaScript 正则表达式的帮助:w3schools.com/jsref/jsref_obj_regexp.asp
    • 不,我没有混淆。我使用 Java 的 Jsoup 进行编程,并在 HTML 代码中包含 Javascript 代码,我在其中使用 Jsoup 进行解析和获取。我以stackoverflow.com/questions/14904776/… 为例,并希望在我的代码中构建您的方法。
    • 啊,这就解释了。你能用你拥有的 Java 代码更新你的问题吗?看起来您忘记将正则表达式放入 " 并转义正则表达式内的 ",您可以在您提供的链接中看到,仔细查看 "\" 的放置位置:@987654335 @
    • 已更新。对于您关于“进入”的问题,我的意思是我想进入那个“href=http:/..../...Doc”链接并做更多的事情。
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2017-03-02
    • 2013-09-05
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多