【问题标题】:WebScraping with HTML Unit Issue with apache lang3WebScraping 与 apache lang3 的 HTML 单元问题
【发布时间】:2013-07-30 22:07:43
【问题描述】:

更新:我最终使用了 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)

【问题讨论】:

  • 只是一个提示,坚持 java 命名约定。小写类导致我的大脑倾斜(可能不是唯一一个)。
  • 您使用的是什么版本的 HtmlUnit?
  • 我正在使用 html 单元版本 2.12,并且只有一个 jar。至于命名约定,对此感到抱歉。下次我会改变它。我只是没有能力选择我可以使用哪一个。我完全失败了。
  • 使用默认的,这样更容易阅读你的代码,也更容易理解别人:oracle.com/technetwork/java/codeconv-138413.html

标签: java web web-crawler htmlunit


【解决方案1】:

根据documentation

因为: 2.4、3.0 将签名从startsWithIgnoreCase(String, String) 更改为startsWithIgnoreCase(CharSequence, CharSequence)

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

【讨论】:

  • 奇怪,我只有 lang3 3.1(1 份),javadoc 准确地说明了您记录的内容,但我仍然无法访问它。我正在尝试使用 eclipse 并重建我的项目 java 库。会不会是IDE?尽管 javadoc 说了什么,但它找到了类路径但不是正确的方法。
猜你喜欢
  • 2018-04-04
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2020-10-29
  • 2013-12-07
  • 2019-12-24
  • 2018-06-21
  • 2015-03-19
相关资源
最近更新 更多