Java正则表达式爬取网页,贴出完整代码

来源:互联网 发布:tomcat是java开发的吗 编辑:程序博客网 时间:2024/05/17 23:10
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.htmlunit.HtmlUnitDriver; // HtmlUnitDriver 需要用到的包import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.List;import java.util.ArrayList;/*** 获取今日头条的某条资讯 (仅测试)* @author qyx* @return*/public void toutiao(){  /*  * 这里使用的是ChromeDriver浏览器驱动,调用方法就会打开浏览器,执行速度慢,等待时间长  * 推荐项目中使用HtmlUnitDriver,伪浏览器,不打开浏览器,所有省去了渲染页面的时间,速度相对比较快,用法一样,注意加jar包  */  WebDriverdriver =new ChromeDriver();  driver.get("https://www.toutiao.com/a6458888925732667918/");  // 整个页面的原代码  Stringcontent = driver.getPageSource();  /**   这里代码类似于Python的re模块,re模块很强大,这里代码实现功能相当于Python正则表达式的“re.findall()” */  Matcherm = Pattern.compile("<h1.*?article-title\">(.*?)</h1>.*?<div.*?\"article-sub\">.*?<span>(.*?)</span>.*?<span>.*?</span>.*?</div>.*?<div.*?\"article-content\"><div>(.*?)</div></div>").matcher(content);  List<String>result =new ArrayList<String>();  while (m.find()) {    //通过正则表达式占位符来获取需要的内容    result.add(m.group(1));//标题    result.add(m.group(2));//来源    result.add(m.group(3));//带html标签的内容  }  //通过类名称查找元素,我这里没有用到  // WebElement element = driver.findElement(By.className("article-content"));  // System.out.println(element.getText());  /*  * 关闭浏览器的方式区别  * driver.close() :关闭当前窗口,有父窗口的情况,仅关闭当前页面,父窗口保留  * driver.quit() :退出所有浏览器,有父窗口的情况,关闭所有页面,直接退出浏览器  */  driver.quit();//退出浏览器,这里用一个就好  // 说明已经获取到内容  if(result !=null &&result.size() >= 3){    //资讯标题    String title = result.get(0);    //资讯来源    String source = result.get(1);    //资讯内容(就是带html标签的富文本)    String content = result.get(2);  }else{  //没有获取到任何内容  }  //成功获取到内容}

原创粉丝点击