我使用htmlparser 1.6来解析网站。
问题是当我解析pdf网站时,我在输出文件中获得了像
这样的奇怪字符ØÇÁÖÜ/:?ÖQØ?WÕWÏ
这是我的代码片段:
try {
parser = new Parser ();
if (1 < args.length)
filter = new TagNameFilter (args[1]);
else
{
filter = null;
parser.setFeedback (Parser.STDOUT);
Parser.getConnectionManager ().setMonitor (parser);
}
Parser.getConnectionManager ().setRedirectionProcessingEnabled (true);
Parser.getConnectionManager ().setCookieProcessingEnabled (true);
// Here the pdf web site
parser.setResource ("http://hal.archives-ouvertes.fr" +
"/docs/00/16/76/78/PDF /27_Bendaoud.pdf");
NodeList list = parser.parse(filter);
NodeIterator i = list.elements ();
while (i.hasMoreNodes ())
processMyNodes(i.nextNode ());
}
catch (EncodingChangeException ece) {
try {
parser.reset ();
NodeList list = parser.parse(filter);
for (NodeIterator i = list.elements (); i.hasMoreNodes (); )
processMyNodes (i.nextNode ());
}
catch (ParserException e) {
e.printStackTrace ();
}
}
catch (ParserException e) {
e.printStackTrace ();
}
更新
我使用iText来解析PDF文件。它适用于本地文件,但我想解析托管在Web服务器中的PDF文件,例如:
http://protege.stanford.edu/publications/ontology_development/ontology101.pdf“
如何使用iText或其他库执行此任务?
答案 0 :(得分:3)
线索在名称中 - HTMLParser解析HTML。 HTML看起来像这样:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>SimonJ's homepage</title></head>
<body>...</body>
</html>
PDF不是HTML - 在原始形式中,它们看起来像这样:
%PDF-1.5^M%<E2><E3><CF><D3>1 0 obj<</Contents 3 0 R/Type/Page/Parent 121 0
R/Rotate 0/MediaBox[0 0 419.528015 595.276001]/CropBox[0 0 419.528015
595.276001]/Resources 2 0 R>>^Mendobj^M2 0 obj<</ColorSpace<</Cs6 132 0 R>>
/Font<</F3 102 0 R/F4 105 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 134 0
R>>>>^Mendobj^M3 0 obj<</Length 917/Filter/FlateDecode>>stream
H<89><A4><95><DB>r<A3>F^P<86><9F><80>w<E8>K<94>Z<8D><E7><C0><CC>0<97>^X!^E^WF
<8A><C0><9B><B8>\{At2ESC ^\!<EF><96><DF>>= K"<B1>R<9B>Jq<C1><A9>^O_<FF>...
这是相当不同的,因此HTMLParser无法应对。如果你想解析PDF,你可能想要调查像iText或PDFBox这样的东西,虽然要注意:PDF文件格式不是为了方便提取文本而设计的 - 许多博士生已烧毁在尝试时... ...
答案 1 :(得分:1)
HtmlParser或任何其他HTML或XML解析器都没有希望解析PDF。 HTML格式与PDF格式完全不同。
您需要做的是让您的网络抓取软件注意远程Web服务器在您获取文档时返回的内容类型标头。这会告诉您刚刚获取的资源的名义格式。如果内容类型是PDF或链接提取器无法处理的其他格式,则不应尝试解析它。
目前您的代码执行此操作:
parser.setResource ("http://hal.archives-ouvertes.fr" +
"/docs/00/16/76/78/PDF /27_Bendaoud.pdf");
这需要替换为使用已打开的InputStream等设置资源的东西