我正在解析HTML页面的表格,但是当我显示数据时,会添加随机字符,如下例所示:
Preowiveding
但它应该是Preding
。
我不知道这是否是一种防止人们解析数据的安全功能 这很奇怪,因为有时文本显示正确而另一个文本显示错误...
我从这里得到的数据是this。 该表的HTML代码看起来有点奇怪:
<a target='_blank' href='#' class='draggableVerein' >L<span style='display:none;'>i<span style='display:none;'>sivba</span><u></u>vbao</span><u></u>iebenau</a>
在文本之间有span
和u
标记,它们似乎在浏览器中什么都不做,但在解析时会产生这些错误。
我使用Ben Reeves HTML Parser。 例如:
HTMLNode *node = [rowNode findChildWithAttribute:@"class" matchingName:@"rang" allowPartial:TRUE];
team.rang = [node allContents];
现在我用HPPLE尝试了libXML2:
NSArray *elements = [xpathParser searchWithXPathQuery:@"//table[2]/tr[5]/td/a"];
// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];
NSString *content = [element content];
NSLog(@"content: %@",content);
输出为ersdorf
而非Eggersdorf
。
这个例子的HTML:
<a target='_blank' href='/datenservice/portal/verein/aktuelles.ds?vereinsNr=8070&sektionsId=485215725|665233118344931246&awVerband=ST_' class='draggableVerein' drag_img='/netzwerk/imagedownload/379402779304830775_383470150383145150-60-60-EfcSAtkX.jpg'>Eggersdorf</a>
这是一个非常奇怪的代码 有什么提示吗?
答案 0 :(得分:1)
看起来这里有两件事。
L
而不是L
)。这可能是混淆的尝试。<span style='display:none'>
... </span>
告诉浏览器不要显示某些文字。这可能是尝试在文本中引入隐形垃圾。浏览器不会显示它,但HTML解析器仍然会吐出该文本。如果您要丢弃垃圾文本,您的代码必须处理<span
&gt; &安培; </span>
标记并自动放弃样式设置为display:none
的任何文字。
注意:您链接的网页的来源有版权声明(德文版)。 IANAL,但您可能需要翻译和律师,以确保您没有通过抓取页面来违反他们的服务条款。
答案 1 :(得分:0)
编辑: 我的最后一个建议是愚蠢的。
您可以在此处使用stringByUnescapingHTML方法:http://code.google.com/p/statz/source/browse/trunk/NSString%2BHTML.m对其进行解码。 工作代码:
NSString *myStr = [[NSString alloc] initWithString:@"Eggersdorf"];
NSArray* components = [myStr componentsSeparatedByString:@";"];
myStr = @"";
int value;
for (NSString *comp in components){
unsigned length = [comp length];
if (length != 0) {
NSString *numberSequence = [comp substringWithRange:NSMakeRange(2, length - 2)];
NSScanner *scanner = [NSScanner scannerWithString:numberSequence];
if ([scanner scanInt: &value] &&
value < USHRT_MAX &&
value > 0){
unichar uchar = value;
NSString *charString = [NSString stringWithCharacters:&uchar length:1];
[myStr stringByAppendingString:charString];
}
}
}