gpt4 book ai didi

java - 使用 Apache Tika 解析 XML 文件

转载 作者:行者123 更新时间:2023-11-30 09:43:25 25 4
gpt4 key购买 nike

我正在抓取一个网页,抓取后从该网页中提取所有链接,然后我尝试使用 Apache Tika 和 BoilerPipe 解析所有 url,方法是使用以下代码,因此对于某些 url,它解析得很好,但很少XML 我收到以下错误。我不确定这个错误是什么意思。我的代码有问题还是 XML 文件有问题?这是 HTML Parser.java 中的第 100 行

String parsedText = tika.parseToString(htmlStream, md);

我遇到的错误-

org.apache.tika.exception.TikaException: Invalid XML: Error on line 16: Invalid byte 1 of 1-byte UTF-8 sequence.
at org.apache.tika.parser.feed.FeedParser.parse(FeedParser.java:75)

at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:197)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:197)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:135)
at org.apache.tika.Tika.parseToString(Tika.java:357)
at edu.uci.ics.crawler4j.crawler.HTMLParser.parse(HTMLParser.java:101)
at edu.uci.ics.crawler4j.crawler.WebCrawler.handleHtml(WebCrawler.java:227)
at edu.uci.ics.crawler4j.crawler.WebCrawler.processPage(WebCrawler.java:299)
at edu.uci.ics.crawler4j.crawler.WebCrawler.run(WebCrawler.java:118)
at java.lang.Thread.run(Unknown Source)

HTMLParser.java代码-

public void parse(String htmlContent, String contextURL) {

InputStream htmlStream = null;
text = null;
title = null;
metaData = new HashMap<String, String>();

urls = new HashSet<String>();
char[] chars = htmlContent.toCharArray();

bulletParser.setCallback(textExtractor);
bulletParser.parse(chars);

try {
text = articleExtractor.getText(htmlContent);
} catch (BoilerpipeProcessingException e) {
e.printStackTrace();
}

if (text == null){
text = textExtractor.text.toString().trim();
}

title = textExtractor.title.toString().trim();
try {
Metadata md = new Metadata();
htmlStream = new ByteArrayInputStream(htmlContent.getBytes());
String parsedText = tika.parseToString(htmlStream, md);
//very unlikely to happen
if (text == null){
text = parsedText.trim();
}
processMetaData(md);
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(htmlStream);
}
bulletParser.setCallback(linkExtractor);
bulletParser.parse(chars);
Iterator<String> it = linkExtractor.urls.iterator();

String baseURL = linkExtractor.base();
if (baseURL != null) {
contextURL = baseURL;
}

int urlCount = 0;
while (it.hasNext()) {
String href = it.next();
href = href.trim();
if (href.length() == 0) {
continue;
}
String hrefWithoutProtocol = href.toLowerCase();
if (href.startsWith("http://")) {
hrefWithoutProtocol = href.substring(7);
}
if (hrefWithoutProtocol.indexOf("javascript:") < 0
&& hrefWithoutProtocol.indexOf("@") < 0) {
URL url = URLCanonicalizer.getCanonicalURL(href, contextURL);
if (url != null) {
urls.add(url.toExternalForm());
urlCount++;
if (urlCount > MAX_OUT_LINKS) {
break;
}
}
}
}
}

最佳答案

尝试改变

htmlStream = new ByteArrayInputStream(htmlContent.getBytes());

String utfHtmlContent = new String(htmlContent.getBytes(),"UTF-8")
htmlStream = new ByteArrayInputStream(utfHtmlContent.getBytes());

这可能是一个 hack,您可能不想将它用作您的最终解决方案,但如果它在此更改后开始工作,您就会知道输入最初不是 UTF-8。

关于java - 使用 Apache Tika 解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com