2天前,我编写了这个Objective-c代码,用于从网站中提取完全符合预期的文本。现在我不知道如何为Android实现这一点。对于Android来说,这真的很奇怪,
基本上,我需要的是从特定URL的html文件中获取//h2/a
周围的元素。 请查看我编写的obj-c实现,它实际上是10行代码,但我无法找到在Android中执行相同操作的方法。
-(void)loadTutorials:(NSString*)startURLS {
NSURL *tutorialsUrl = [NSURL URLWithString:startURLS];
NSData *tutorialsHtmlData = [NSData dataWithContentsOfURL:tutorialsUrl];
TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:tutorialsHtmlData];
NSString *tutorialsXpathQueryString = @"//h2/a";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];
NSString *podcastTitles[99];
int jjj=0;
for (NSString *string in tutorialsNodes) {
podcastTitles[jjj]=[[[tutorialsNodes[jjj] firstChild] content] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@",podcastTitles[jjj]); //WORKING PERFECTLY FINE
jjj++;
}
}
答案 0 :(得分:0)
有了它的工作,关键是要坚持使用XPathFactory但是要为它提供一个HTMLCleaner
- 已清理的HTML。不幸的是,我无法找到让我走上正轨的SO答案,所以今天没有信用,但希望我能再次遇到它。
Idk这些行中有多少是必需的,我不会清理这段代码,但这个块现在适用于我。
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);
TagNode tagNode = new HtmlCleaner().clean(
websiteContent);
org.w3c.dom.Document doc = new DomSerializer(
new CleanerProperties()).createDOM(tagNode);
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList titleNodes = (NodeList) xpath.evaluate("//h2/a",
doc, XPathConstants.NODESET);
System.out.println("iii"+titleNodes);
for(int i=0; i<titleNodes.getLength();i++){
System.out.println("t t t"+titleNodes.item(i).getTextContent()); //WORKING
}