我正在使用 crawler4j 来爬取一些网站,它工作正常。我能够下载网站中的所有文件,现在我有一个新任务摆在我面前。如果可能的话,我还需要提取 iframe、base64 和其他嵌入式代码!
到目前为止,我正在做的是,在我的访问方法中
String place="<iframe";
if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
List<WebURL> links = htmlParseData.getOutgoingUrls();
System.out.println("Text length: " + text.length());
// System.out.println("html sorce code:- "+html);
int number=html.length();
String[] result=html.split("\\s");
System.out.println("print random word"+result[12500]+number);
int i;
for(i=0;i<number;i++)
{
if(result[i].equals(place))
{
System.out.println("iframe found"+i);
}
}
System.out.println("Text length: " + text.length());
System.out.println("Html length: " + html.length());
System.out.println("Number of outgoing links: " + links.size());
}
我已经添加了上面的 if case 来获取给定 html 页面的 iframe。它的工作几乎接近完美。
我知道这是从 html 页面中提取 iframe 的不好方法。我尝试了许多其他方法从 html 页面中提取 iframe 和其他嵌入式代码,但失败了。在查看源代码后,我找到了一个可以满足我的java 类要求。从上面的 url 中可以看出,我必须使用 HtmlContentHandler 类中的必要参数调用 startElemnt 方法才能获取所需的代码。
`public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException`
{
}
所以在我的访问方法中,我创建了一个 HtmlContentHandler 对象并尝试调用上面提到的 startElement 方法。
HtmlContentHandler ecode=new HtmlContentHandler();
ecode.startElement(url,localName,qName,attributes);
现在问题出在该方法的参数上。我正在发送为 url 参数抓取的 url 值,但我不知道必须为其余参数发送什么值!
有人可以帮助我吗?还有一件事我知道许多其他工具可以使我的工作变得轻松,但我想在 crawler4j 中做到这一点!
谢谢!!