htmluinit+jsoup 网络爬虫

来源:互联网 发布:c语言入门程序设计 编辑:程序博客网 时间:2024/06/06 13:21

网络爬虫个人笔记

1.所需要的jar包

htmluinit.jar (可理解为无页面的浏览器,可以模拟浏览器各种操作,可执行js ,处理ajax请求后页面等)

jsoup.jar(处理静态页面,转换为dom文档,进行操作)

2.使用实例

2.1htmlunit

      

WebClientwebClient= newWebClient(BrowserVersion.CHROME);//创建浏览器       webClient.getOptions().setJavaScriptEnabled(false);//禁用js       webClient.getOptions().setCssEnabled(false);//禁用css       //添加cookie       CookieManagercookieManager= newCookieManager();       cookieManager.addCookie(new Cookie("tieba.baidu.com", "BDUSS", "具体值"));       webClient.setCookieManager(cookieManager);       // 获取当前页的所有帖子元素。返回 DOM节点列表       HtmlPagepage= webClient.getPage("http://tieba.baidu.com/mo/m?kw=java");       DomNodeList<DomNode>iList = page.querySelectorAll(".i");//参数为各种选择器,同JQ       // 选择 p 元素       DomNodep =iList[0].querySelector("p");//单个节点       p.asText()//返回元素文本    <a>文本</a>             返回   文本          p.asXml()//返回元素xml文件 <a>文本</a>            返回  <a>文本</a>       //获取a元素连接       HtmlAnchora = (HtmlAnchor) i.querySelector("a");       Stringhref = a.getAttribute("href");       //获取按钮,模拟点击       HtmlInputsub1 = (HtmlInput) tPage.querySelector("input[name=sub1]");       sub1.click();

 处理ajax返回延迟问题

HtmlPage page2 = btn.click();      for (inti = 0; i < 20; i++) {       String text= page2.querySelector("#textarea1").asText();            if (!text.trim().isEmpty()){             System.out.println(page2.asXml());                   break;            }             synchronized (page2) {                  page.wait(500);             }   }


2.2jsoup

    Jsoup.parse解析HTML字符串,如Jsoup.parse("<html><head><title>Firstparse</title></head>")

    Jsoup.connect解析url网站地址,如Jsoup.connect(http://www.baidu.com).get()

 

  //本地文件读取方式    File input = new File("/tmp/input.html");     Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");    //网络网页读取方式    Document doc = Jsoup.connect("http://www.oschina.net/")      .data("query", "Java")   // 请求参数     .userAgent("I ’ mjsoup") // 设置 User-Agent      .cookie("auth", "token") // 设置 cookie      .timeout(3000)           // 设置连接超时时间     .post();                 // 使用 POST 方法访问 URL      Document doc = Jsoup.connect("http://www.baidu.com").timeout(10000).get();          Elementslinks = doc.getElementsByTag("a");        for (Element link : links) {         StringlinkHref = link.attr("href");         StringlinkText = link.text();        System.out.println("linkHref:  "+linkHref);        System.out.println("linkText:  "+linkText);        }   


2.3htmlunit与jsoup结合方式

  

 DomNode p = i.querySelector("h4a");    String xml =i.asXml();    Document dom= Jsoup.parse(xml, "UTF-8");    Elements elements=dom.select("img");    String img_url=elements.get(0).attr("data-original");


2.4 Frame页面问题处理

HtmlPage framePage(HtmlPage)p.getFrameByName("FrameName").getEnclosedPage();

个人爬虫项目练习(不涉及多线程):http://download.csdn.net/detail/ab2361936/9767254

0 0