使用javascript将InnerHTML复制到文本文件

时间:2015-08-11 10:36:57

标签: javascript html node.js news-feed

我正在尝试编写一个javascript,它将从BBC网站(http://www.bbc.co.uk/news)的顶级新闻故事中获取内部HTML代码,并将其放入txt文档中。 我对javascript知之甚少,我更了解.BAT和.VBS,但我知道他们不能这样做。

我不确定如何处理这个问题。 我想让它扫描一个固定的outerHTML代码,然后将内部代码复制到txt文件。

但是,我似乎无法找到每天都是永久性的outerHTML代码。例如,这是今天的标题。

<span class="title-link__title-text">Benefit plan 'could hit young Britons'</span>

如你所见,它的标题已合并。

我正在使用Firefox,如果它有所不同。

非常感谢任何帮助。

此致

主芯片。

3 个答案:

答案 0 :(得分:1)

纯客户端浏览器方法:

好的,我为你做了这个小提琴,也可以帮助别人。这对我来说很有趣并且具有挑战性。以下是我如何实现可能解决方案的要点

  • 使用ECMA 5 Blob Api即时创建文本文件。
  • 在iframe 中加载http://www.bbc.co.uk/news(跨域原始访问 - 请参阅下面的注释部分)
  • 在iframe加载事件中使用 setTimeout 或触发超时 setInterval 评论 - 按小时或每日重复执行)根据您的需要(根据您的需要调整时间)
  • 使用 document.querySelectorAll(“。title-link span”)查询文本节点 基于检查网页来源是通用的。
  • 查看fiddler Link

使用Javascript:

 (function () {
    var textFile = null,
        makeTextFile = function (text) {
            var data = new Blob([text], {
                type: 'text/plain'
            });

            // If we are replacing a previously generated file we need to
            // manually revoke the object URL to avoid memory leaks.
            if (textFile !== null) {
                window.URL.revokeObjectURL(textFile);
            }

            textFile = window.URL.createObjectURL(data);

            return textFile;
        };

    var iframe = document.getElementById('frame');    
    var commFunc = function () {
            var iframe2 = document.getElementById('frame'); //This is required to get the fresh updated DOM
            var innerDoc = iframe2.contentDocument || iframe2.contentWindow.document;            
            var getAll = Array.prototype.slice.call(innerDoc.querySelectorAll(".title-link span"));          
            var dummy = "";
            for (var obj in getAll) {
                dummy = dummy.concat("\n" + (getAll[obj]).innerText);
            }
            var link = document.createElement("a");
            link.href = makeTextFile(dummy);
            link.download = "sample.txt"
            link.click();
            console.log("Downloaded the sample.txt file");
        };

    iframe.onload = function () {
        setTimeout(commFunc, 1000); //Adjust the time required to load
        //setInterval(commFunc, 1000);
    };  

    //Click the button when the page inside the iframe is loaded
    create.addEventListener('click', commFunc);            
})();

HTML:

<span class="title-link__title-text">Benefit plan 'could hit young Britons'</span>
    <div>
        <iframe id="frame" src="http://www.bbc.co.uk/news"></iframe>
    </div>
    <button id="create">Download</button>

注意:

  • 要在Chrome上运行上述javascript,您需要disable web security。 上面的脚本应该在firefox上运行良好,不需要调整。
  • 这是一个可以使用pure实现的插图 浏览器脚本。选项卡应该是有效的定期抓取。
  • 针对现代浏览器

推荐方法:

  • 使用node.js服务器,您可以修改上面的脚本以便运行 stanalone

  • 或任何服务器端脚本框架,如php,java spring等。

使用Node js方法:

Javascript:

var jsdom = require("node-jsdom");
var fs = require("fs");
jsdom.env({
  url: "http://www.bbc.co.uk/news",
  scripts: ["http://code.jquery.com/jquery.js"],
  done: function (errors, window) {
    var $ = window.$;
    console.log("HN Links");
    $(".title-link span").each(function() {
      //console.log(" -", $(this).text());
      fs.existsSync("sample.txt") === true ? fs.appendFile("sample.txt", "\r"+ $(this).text()) : fs.writeFile("sample.txt", "\r"+ $(this).text())
    });
  }
});

以上代码的相关性:

希望它能帮助你和其他人

答案 1 :(得分:0)

我的想法 -

  1. JS可用于从页面获取数据/文本,但是,要将其保存到文件中,您必须在后端使用某些内容,如Python或PHP等。

  2. 为什么要使用JS?你可以使用CURL很好地刮网。如果这对您来说更容易,请使用PHP Curl。

  3. 您可以使用 -

    抓取/下载网页
    <?php
        // Defining the basic cURL function
        function curl($url) {
            $ch = curl_init();  // Initialising cURL
            curl_setopt($ch, CURLOPT_URL, $url);    // Setting cURL's URL option with the $url variable passed into the function
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Setting cURL's option to return the webpage data
            $data = curl_exec($ch); // Executing the cURL request and assigning the returned data to the $data variable
            curl_close($ch);    // Closing cURL
            return $data;   // Returning the data from the function
        }
    ?>
    

    然后自行决定使用该功能 -

    <?php
        $scraped_website = curl("http://www.yahoo.com");  // Executing our curl function to scrape the webpage http://www.yahoo.com and return the results into the $scraped_website variable
    ?>
    

    参考链接 -

    Web scraping with PHP and CURL

    Scraping in PHP with CURL

    使用DIV和Node的HTML元素可以更清晰地清除。 检查这些问题 - Part1 - Part2 - Part3

    希望它有所帮助。快乐的编码!

答案 2 :(得分:-1)

你想要下载带有html内容的txt文件吗?这是正确的,你可以使用这个create txt file and download it如果你想从所有标题跨度中获取文本,你需要这样做

 $query = "SELECT english.word, maranao.word, maranao.pronounciation, maranao.grammar, english.definition" . 
                "FROM english, maranao".
                "WHERE english.keyword_num = maranao.keyword_num and english.word = '$search'";

                $result = mysql_query($query) or die(mysql_error());

                while($row=mysql_fetch_array($result))
                {   
                    echo $row['word'];
                    echo $row['pronounciation'];
                    echo $row['grammar'];
                    echo $row['definition'];
                }

然后将txt变量写入文件,就像上面提到的帖子一样。