парсинг HTML и переход по ссылке на JavaScript - PullRequest
4 голосов
/ 23 октября 2011

Меня попросили извлечь информацию академический коллега с веб-сайта, на котором мне нужно связать содержимое веб-страницы в таблице - не слишком сложно с содержимым текстового файла, который может быть только повторно проверен (насколько я можно сказать) нажав на ссылку JavaScript ... например

<a id="tk1" href="javascript:__doPostBack('tk1$ContentPlaceHolder1$grid$tk$OpenFileButton','')">

Таблица удобно находится внутри таблицы с id = 'tk1', что хорошо ... но как мне перейти по ссылке, которая тянет текстовый файл.

В идеале я хотел бы сделать это в R ... Я могу взять соответствующую таблицу в текстовом формате, сказав

u <- the url of interest...
library(XML)
tables = readHTMLTable(u)
interestingTable <- tables[grep('tk1', names(tables))]

И это даст текст в таблице, но как мне получить HTML для этой конкретной таблицы? и как мне "нажать" на кнопку и получить текстовый файл за ней?

Я отмечаю, что существует форма с массивными скрытыми значениями - сайт, кажется, управляется asp.net и использует непроницаемые URL.

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

Это несколько сложно и не полностью интегрировано в R, но некоторая система () - возиться с вами.

<code>
var page = new WebPage();
page.open('http://www.menne-biomed.de/uni/JavaButton.html', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var ua = page.evaluate(function () {
            var t =  document.getElementById('tk1').href;
            var re = new RegExp('\((.*)\)');
            return eval(re.exec(t)[1]);<br>
        });
        console.log(ua);// Outputs <a href="http://cran.at.r-project.org/" rel="nofollow">http://cran.at.r-project.org/</a>
    }
    phantom.exit();
});
  • С фантомами на пути, звоните

    phantomjs javabutton.js

Ссылка будет отображаться на консоли. Используйте любой метод, чтобы получить его в Rcurl.

Не элегантно, но, может быть, кто-то обернет фантомов в R однажды. В случае, если ссылка на JaveButton.html должна быть потеряна, здесь она выглядит как код.

<!DOCTYPE html >
<head>
<script>
inaccesibleJavascriptVar = 'http://' + 'cran.at.r-project.org/';
function doPostBack(myref)
          {
            window.location.href= myref;
            return false;
        }
</script>
</head>
<body>
<a id="tk1" href="javascript:doPostBack(inaccesibleJavascriptVar)" >Click here</a>
</body>
</html>
1 голос
/ 23 октября 2011

Посмотрите на пакет RCurl:

http://www.omegahat.org/RCurl/

...