4

次の形式のスクレイプしたいページがあります。

<ul>
<li>7 pm</li>
<li>8 pm</li>
<ul>

<h6 id="7 pm">7 pm</h6>
<div class="show">My TV Show #1</div>
<div class="show">My TV Show #2</div>
<div class="show">My TV Show #3</div>
<h6 id="8 pm">8 pm</h6>

どうすれば時間を表示して、その時間のすべての番組を表示できますか?

私は成功して任意の配列に時間を格納しようとしましたが、実際に時間の配列で何かをすることになると行き詰まります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>jQuery PHP Page Scape</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script type="text/javascript">
        $("document").ready(function() {
            var times = new Array();

            $.ajax({
                url: "curl.php",
                dataType: 'text',
                success: function(data) {
                    $(data).find('.wnt-top-r ul li').each(function(i, item) {
                        times.push($(item).text());
                        $('#content').append(times[i]);
                    });
                }
            });
        });
    </script>
</head>
<body>

    <div id="content"></div>

</body>
</html>

ありがとう、ブライアン

4

1 に答える 1

2

マークアップを変更します。これは、レイアウトがどのように行われるかについては不可能/最適化されていません。

まず、有効なHTMLID名は文字で始まる必要があります。

次に、同じIDは1つだけで、重複することはできません。

第三に、スペースはID名の有効な文字ではありません。

マークアップが無効なので、ここに提案があります。

<div id="container">
    <ul>
        <li data-showtime="19">7pm</li>
        <li data-showtime="20">8pm</li>
        <li data-showtime="21">9pm</li>
    </ul>

    <h6 class="time-title time-19" data-showtime="19">7pm</h6>
    <div class="show time-19">My TV Show 1</div>
    <div class="show time-19">My TV Show 2</div>
    <div class="show time-19">My TV Show 3</div>
    <div class="show time-19">My TV Show 4</div>
    <div class="show time-19">My TV Show 5</div>
    <h6 class="time-title time-20" data-showtime="20">8pm</h6>
    <div class="show time-20">My TV Show 5</div>
    <div class="show time-20">My TV Show 6</div>
</div>

とスクリプト:

  $(function() {
        showtime = {};
        $("#container").find("h6.time-title").each(function() {
            var t = $(this);
            var d = t.data();
            showtime[d.showtime] = {};
            showtime[d.showtime]['caption'] = t.text();

            var tempshows = [];
            $(".show.time-"+d.showtime).each(function() {
                showname = $(this).text();
                tempshows.push(showname)
            })

            showtime[d.showtime]['shows'] = tempshows;
        })

console.log(showtime);

    })
​

jsFiddle: http: //jsfiddle.net/FhKAh/1/

マークアップを変更できず、これに対処する必要がある場合は、次のことを試してください。

showtime = {};
$("h6").each(function() {
    h6 = $(this);

    var tempshow = [];
    h6.nextUntil("h6").each(function() {
        tempshow.push($(this).text())
    });


    showtime[h6.text()] = {};
    showtime[h6.text()]['shows'] = tempshow;


});

    console.log(showtime);

jsFiddle: http: //jsfiddle.net/CGyBK/

于 2012-10-11T22:00:16.500 に答える