获取API:从http响应中获取标题,关键字和正文

jac*_*ack 5 javascript web-scraping

我想知道什么是使用fetch api从responseText中获取用户可见的标题,关键字和内容的最佳方法(在同一来源上制作XMLHttpRequest时有没有办法发送cookie?)

目前,我使用正则表达式从响应文本中获取标题,例如:

var re_title = new RegExp("<title>[\n\r\s]*(.*)[\n\r\s]*</title>", "gmi");
var title = re_title.exec(responseText);
if (title)
    title = title[1]
Run Code Online (Sandbox Code Playgroud)

要获取关键字元标记中的内容,我需要使用几个正则表达式.

为了让用户看到内容,我们不需要像script,div等标签,我们也不需要脚本标签之间的文本.这只是为了获得在响应主体中有意义的单词.

我认为(也是根据各种stackoverflow帖子)使用正则表达式这不是正确的方法.有什么可以替代?

rph*_*phv 4

正如zzzzBov提到的,您可以使用浏览器的 API 实现通过解析请求DOMParser来实现此目的。下面是一个为自身发送此类请求并解析标题、关键字和正文的示例:response.text()fetch

<!DOCTYPE html>
<html>

<head>
  <title>This is the page title</title>
  <meta charset="UTF-8">
  <meta name="description" content="Free Web Help">
  <meta name="keywords" content="HTML,CSS,XML,JavaScript">
  <meta charset="utf-8">
  <script>
    fetch("https://dl.dropboxusercontent.com/u/76726218/so.html")
      .then(function(response) {
        return (response.text());
      })
      .then(function(responseText) {
        var parsedResponse = (new window.DOMParser()).parseFromString(responseText, "text/html");
        document.getElementById("title").innerHTML = "Title: " + parsedResponse.title;
        document.getElementById("keywords").innerHTML = "Keywords: " + parsedResponse.getElementsByName("keywords")[0].getAttribute("content");
        document.getElementById("visibleText").innerHTML = "Visible Text: " + parsedResponse.getElementsByTagName("body")[0].textContent;
      });
  </script>
</head>

<body>

  <div>This text is visible to the user.</div>
  <div>So <i>is</i>  <b>this</b>.</div>
  <hr>
  <b>Results:</b>
  <ul id="results">
    <li id="title"></li>
    <li id="keywords"></li>
    <li id="visibleText"></li>
  </ul>

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

我发现 Mozilla 关于Fetch API、使用 Fetch和Fetch 基本概念的文档很有帮助。