powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Парсер страниц
2 сообщений из 2, страница 1 из 1
Парсер страниц
    #39040946
HunterNomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Решил попробовать Node.js в качестве сервера для парсинга страниц.
В Node я полный ламер. Все делал из кусков свободно выложенных примеров.
Пробовал написать на php станичку и с нее делать ajax запросы на "сервер-парсер".
С точки зрения программирования )) тут все просто - есть поле ввода, есть кнопка.
В поле ввели url, нажали кнопку по ajax отправили на сервер этот url и в ответ получили распарсеренные как json. Функция на станице должна данные добавить в div.

Но особо похвастаться ничем. С первого заход стало ясно, что непонятно почему сцепка клиент-сервер делает по два запроса к url прежде чем вернуть данные на страницу. При смене url-а для запроса старый запрос еще раз выводится на страницу.
Помогите разобраться что не так. Или подскажите где можно посмотреть))
Собственно это сервер ))))
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
var express = require('express');
var http = require("http");
var url = require("url");
var request = require('request');
var cheerio = require('cheerio');
var cors = require('cors');
var app = express();
var titlejson, h1json;

app.use(cors());
app.get('/', function (req, res) {

    var url_parts = url.parse(req.url, true);
    var urlpars = url_parts.query.url;
    console.log(urlpars);

    var headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
    };
    var options = {
        url: urlpars,
        headers: headers
    };
    request(options, function (err, res, body) {
        if (err) {
            console.log(err);
        } else {
            $ = cheerio.load(body);
            titlejson = $('title').text();
            h1json = $('h1').text();
            console.log('title:: ' + titlejson);
            console.log('h1:: ' + h1json);
        }

    });

    res.json({title: titlejson, h1: h1json});
});
app.listen(8008);
console.log("Server is listening");



А это страница с которой отправляется по ajax-су запрос и ждется ответ.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<!DOCTYPE html>
<html lang="en">
<head>
    <title>parser</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="//fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
    <link href="css/bootstrap.css" media="screen" rel="stylesheet" type="text/css">
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-3"></div>
        <div class="col-lg-6">
            <h2>Hello, Parser!</h2>

            <div class="col-md-12">
                <div class="well-lg" style="border: 1px #31708f solid; border-radius: 5px; height: 200px;">
                    <div id="pars" class="col-md-12"></div>
                </div>
                <input id="parsurl" type="text" placeholder="http://example.com" class="col-md-9"
                       style="margin-top: 10px;">
                <button id="add" class="btn btn-default btn-sm col-md-3" style="margin-top: 10px;">add</button>
            </div>
        </div>
        <div class="col-md-3"></div>
    </div>
</div>
<script src="js/jquery-2.1.4.min.js"></script>
<script src="js/bootstrap.js"></script>
<script>
    $(document).ready(function () {
        $('#add').click(function () {
            $.get("http://XXX.XXX.XXX.XXX:8008/?url=" + $('#parsurl').val(), function (data) {
                $("#pars").empty();
                $("#pars").append("<h2 style='margin: -7px;'>" + data.title + "<h2/>");
                if(data.h1 != 'noneh1none'){
                    $("#pars").append("<h4>" + data.h1 + "<h4/>");
                }

            });
        });
    });
</script>
</body>
</html>



За ранее спасибо.
...
Рейтинг: 0 / 0
Парсер страниц
    #39044125
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HunterNomad,
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    
// !Асинхронный вызов
  request(options, function (err, res, body) {
        if (err) {
            console.log(err);
        } else {
            $ = cheerio.load(body);
// Эти присвоения отработают после того, как app.get вернет результат
            titlejson = $('title').text();
            h1json = $('h1').text();

            console.log('title:: ' + titlejson);
            console.log('h1:: ' + h1json);
        }

    });

// Значения titlejson, h1json при первом запросе после старта сервера будут undefined,
// при последующих - результатом "предидущего" вызова request.
    res.json({title: titlejson, h1: h1json});

// Как одно из решений - использовать `sync-request` https://www.npmjs.com/package/sync-request
// вместо `request`
// ЗЫ: желательно объявление переменных titlejson, h1json перенести в обработчик app.get('/'
});
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Парсер страниц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]