gpt4 book ai didi

java - 使用 apache lang3 的 HTML 单元进行网页抓取问题

转载 作者:行者123 更新时间:2023-12-01 14:17:43 25 4
gpt4 key购买 nike

更新:我最终使用了 Ghost.py,但希望得到回复。

我最近一直在使用直接 java/apache httpd 和 nio 来抓取必须的页面,但遇到了我所期望的一个简单问题,但实际上似乎并非如此。我正在尝试使用 html 单元来抓取页面,但是每次运行下面的代码时,我都会收到错误消息,告诉我缺少一个 jar。不幸的是,我在这里找不到答案,因为这个问题有一个奇怪的部分。

所以,这是奇怪的部分。我有 jar (lang3) 它是最新的,它包含一个有效的方法 StringUtils.startsWithIgnoreCase(String string,String prefix) 。我真的很想避免使用 selenium,因为我需要在几个月内抓取同一网站上大约 1000 个页面(如果采样告诉我正确的话)。

有我需要的特定版本吗?我所看到的只是更新到 3-1 的注释。如果安装有效的话有什么方法吗?

谢谢。

我正在运行的代码是:

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow;


public class crawl {

public crawl()
{
//TODO Constructor
crawl_page();
}


public void crawl_page()
{
//TODO control the crawling



WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);

webClient.setRefreshHandler(new RefreshHandler() {
public void handleRefresh(Page page, URL url, int arg) throws IOException {
System.out.println("handleRefresh");
}

});

//the url for CA's Megan's law sex off
String url="http://www.myurl.com" //not my url

HtmlPage page;
try {
page = (HtmlPage) webClient.getPage(url);
HtmlForm form=page.getFormByName("_ctl0");
form.getInputByName("cbAgree").setChecked(true);

page=form.getButtonByName("Continue").click();

System.out.println(page.asText());


} catch (FailingHttpStatusCodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




}

}

错误是:

Exception in thread "main" java.lang.NoSuchMethodError:      org.apache.commons.lang3.StringUtils.startsWithIgnoreCase(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
at com.gargoylesoftware.htmlunit.util.URLCreator$URLCreatorStandard.toUrlUnsafeClassic(URLCreator.java:66)
at com.gargoylesoftware.htmlunit.util.UrlUtils.toUrlUnsafe(UrlUtils.java:193)
at com.gargoylesoftware.htmlunit.util.UrlUtils.toUrlSafe(UrlUtils.java:171)
at com.gargoylesoftware.htmlunit.WebClient.<clinit>(WebClient.java:159)
at ca__soc.crawl.crawl_page(crawl.java:34)
at ca__soc.crawl.<init>(crawl.java:24)
at ca__soc.us_ca_ca_soc.main(us_ca_ca_soc.java:17)

最佳答案

根据documentation

Since: 2.4, 3.0 Changed signature from startsWithIgnoreCase(String, String) to startsWithIgnoreCase(CharSequence, CharSequence)

所以,您的类路径上可能有两个类似的 jar。

关于java - 使用 apache lang3 的 HTML 单元进行网页抓取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958313/

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