1

我正在尝试使用 Hpple 包装器将数据从网站获取到表格视图中:https ://github.com/topfunky/hpple 。

在我看到的网站源代码中(这是相关部分):

<div id="traffic_content">
                <marquee width="412" height="21" direction="right" scrollamount="3">
                    <a href="/Site/Traffic.aspx" id="ctl00_TrafficHolder">מעודכן לשעה: 16:40&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;בכביש תל אביב חיפה הישן, עומס תנועה ממחלף כפר סבא רעננה צפון עד מחלף הדרים, בגלל תנאונת דרכים.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;כביש מספר 70 עמוס מצומת אבליים עד צומת יבור.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;איילון דרום עמוס ממחלף רוקח עד מחלף לה גווארדיה. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;איילון צפון עמוס ממחלף חולון עד מחלף גלילות מזרח.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;***&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;שימו לב, בעלי זכות בחירה אשר יימצאו ביום הבחירות בישוב המרוחק למעלה מ-20 קילומטר מתחום השיפוט של הישוב בו ממוקם הקלפי בו הם אמורים להצביע, זכאים לנסיעה חינם בתחבורה הציבורית &#40;אוטובוסים והרכבת&#41;.יש להציג תעודה מזהה ואת ההודעה לבוחר.&#40;ממשו את זכותכם להצביע&#41;.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;למסירת ולקבלת דיווחים ותזמונים חייגו: 918 - 800 - 1-800&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;בנסיעה בקרבת בתי ספר, גינות משחקים ומתנ&quot;סים – יש להוריד מהירות, גם כשהכביש פנוי. בהגיעכם למעבר חצייה – אפשרו תמיד חצייה לילד המבקש לחצות. היו דרוכים, ערניים ומרוכזים, וחפשו אתם את הילדים העשויים להתפרץ לכביש.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;עורך דיווחי התנועה:בני כבודי</a>
                </marquee>
            </div>

我有兴趣将内容放入表格视图中。

所以我尝试了:

NSURL *trafficUrl = [NSURL URLWithString:@"http://www.glgltz.co.il/Site/Traffic.aspx"];
NSData *trafficHtmlData = [NSData dataWithContentsOfURL:trafficUrl];

TFHpple *trafficParser = [TFHpple hppleWithHTMLData:trafficHtmlData];

NSString *trafficXpathQueryString = @"//div[@id='traffic_content']/a";
NSArray *trafficNodes = [trafficParser searchWithXPathQuery:trafficXpathQueryString];

NSMutableArray *newTraffic = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in trafficNodes){
    Traffic *traffic = [[Traffic alloc] init];
    [newTraffic addObject:traffic];
    traffic.name = [[element firstChild] content];
}

然后将其加载到表视图的 NSArray 中。

当我调试代码时,我看到 trafficNodes 中有 0 个对象。

如何正确获取这些数据?

4

1 回答 1

1

您忘记了 XPath 中的标记;) NSArray 是空的,因为没有"div[@id='traffic_content']/a"

尝试修改如下:

@"//div[@id='traffic_content']/marquee/a"

我尝试使用以下代码下载它,一切似乎都有效;)

    //EDIT: //After converting trafficHtmlData the both the label and NSLog() show correct hebrew letters
    NSData *trafficHtmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.glgltz.co.il/Site/Traffic.aspx"]];
    NSString *trafficHTMLDataString = [[NSString alloc] initWithData:trafficHtmlData encoding:NSUTF8StringEncoding];
    NSData *newData = [trafficHTMLDataString dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingWindowsHebrew)];
    if (trafficHtmlData != nil) {
        TFHpple *trafficParser = [TFHpple hppleWithHTMLData:trafficHtmlData];
        NSArray *trafficNodes = [trafficParser searchWithXPathQuery:@"//div[@id='traffic_content']/marquee/a"];
        TFHppleElement *element = trafficNodes[0];
        //EDIT: Convert the first element in trafficNodes   
        NSString *string = [element content];   
        [self.label setStringValue:string];
        NSLog(@"%@", string);

        /*
        NSMutableArray *newTraffic = [[NSMutableArray alloc] initWithCapacity:0];
         for (TFHppleElement *element in trafficNodes){
            Traffic *traffic = [[Traffic alloc] init];
            traffic.name = [[element firstChild] content];
            [newTraffic addObject:traffic];
         }
         */
    }
于 2013-01-21T18:24:56.770 回答