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{
//没有获取到任何内容
}
//成功获取到内容
}
Java正则表达式爬取网页,贴出完整代码
最新推荐文章于 2025-02-20 16:14:04 发布