js 抓取网页内容(新浪财经为例之1.依赖的jar包-1. )

优采云 发布时间: 2022-01-06 09:03

  js 抓取网页内容(新浪财经为例之1.依赖的jar包-1.

)

  使用Selenium和PhantomJs,可以模拟用户操作,爬取大部分网站。我们以新浪财经为例。我们抓取新浪财经新闻版块内容。

  

  1.依赖的jar包。我的项目是普通SSM单人间的web项目。最后一个jar包用于在获取网页dom后解析网页内容。

  

org.seleniumhq.selenium

selenium-java

3.2.0

javax

javaee-web-api

7.0

provided

com.google.guava

guava

20.0

cn.wanghaomiao

JsoupXpath

2.2

  2.获取网页dom内容

  package com.nsjr.grab.util;

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.openqa.selenium.phantomjs.PhantomJSDriver;

import org.openqa.selenium.phantomjs.PhantomJSDriverService;

import org.openqa.selenium.remote.DesiredCapabilities;

import cn.wanghaomiao.xpath.model.JXDocument;

@SuppressWarnings("deprecation")

public class SeleniumUtil {

public static JXDocument getDocument(String driverUrl,String pageUrl){

JXDocument jxDocument = null;

PhantomJSDriver driver = null;

try{

System.setProperty("phantomjs.binary.path", driverUrl);

System.setProperty("webdriver.chrome.driver", driverUrl);

DesiredCapabilities dcaps = new DesiredCapabilities();

//ssl证书支持

dcaps.setCapability("acceptSslCerts", true);

//截屏支持

dcaps.setCapability("takesScreenshot", true);

//css搜索支持

dcaps.setCapability("cssSelectorsEnabled", true);

//js支持

dcaps.setJavascriptEnabled(true);

//驱动支持

dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,driverUrl);

//创建无界面浏览器对象

driver = new PhantomJSDriver(dcaps);

//WebDriver driver = new ChromeDriver(dcaps);

driver.get(pageUrl);

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

Document document = Jsoup.parse(driver.getPageSource());

jxDocument = new JXDocument(document);

}catch(Exception e){

e.printStackTrace();

}finally{

if(driver != null){

driver.quit();

}

}

return jxDocument;

}

public static String getProperty(List list){

if(list.isEmpty()){

return "";

}else{

return list.get(0).toString();

}

}

}

  3.分析并保存内容

  JXDocument jxDocument = SeleniumUtil.getDocument(captureUrl.getDriverUrl(), captureUrl.getSinaNews());

//保存第一部分加粗新闻

List listh3 = jxDocument.sel("//div[@id='impNews1']/div[@id='fin_tabs0_c0']/div[@id='blk_hdline_01']/h3/a");

for(Object a :listh3){

JXDocument doc = new JXDocument(a.toString());

//System.out.println("地址:"+doc.sel("//a/@href"));

//System.out.println("标题:"+doc.sel("//text()"));

saveNews(SeleniumUtil.getProperty(doc.sel("//text()")), SeleniumUtil.getProperty(doc.sel("//a/@href")), Constant.NEWS_TYPE_BOTTOM, Constant.NEWS_SOURCE_SINA);

}

//保存其余新闻

List listP = jxDocument.sel("//div[@id='impNews1']/div[@id='fin_tabs0_c0']/div[@id='blk_hdline_01']/p/a");

for(Object a :listP){

JXDocument doc = new JXDocument(a.toString());

//System.out.println("地址:"+doc.sel("//a/@href"));

//System.out.println("标题:"+doc.sel("//text()"));

saveNews(SeleniumUtil.getProperty(doc.sel("//text()")), SeleniumUtil.getProperty(doc.sel("//a/@href")), Constant.NEWS_TYPE_BOTTOM, Constant.NEWS_SOURCE_SINA);

}

//保存第二部分新闻

List listpart2 = jxDocument.sel("//div[@id='impNews1']/div[@id='fin_tabs0_c0']/div[2]/ul");

for(Object a :listpart2){

JXDocument doc = new JXDocument(a.toString());

List alist = doc.sel("//li/a");

for(Object a2 :alist){

JXDocument doc2 = new JXDocument(a2.toString());

//System.out.println("地址:"+doc2.sel("//a/@href"));

//System.out.println("标题:"+doc2.sel("//text()"));

saveNews(

SeleniumUtil.getProperty(doc2.sel("//text()")),

SeleniumUtil.getProperty(doc2.sel("//a/@href")),

Constant.NEWS_TYPE_BOTTOM,

Constant.NEWS_SOURCE_SINA

);

}

}

  4.说明

  captureUrl.getDriverUrl(), captureUrl.getSinaNews() 这两个地址分别是PhantomJs工具的地址和要爬取的网站的地址,其中<br />

  sina_news = https://finance.sina.com.cn/

  driverUrl= D:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe

  可以直接从官网下载PhantomJs工具。 Windows 和 Linux 版本可供下载。网页结构分析使用JsoupXpath,这是一个中文写的html文档解析工具包,非常好用。语法可以参考Xpath的相关语法进行节点选择。

  5. 抓取结果。由于项目要求比较简单,对实时性和性能要求不高,只能通过仓储来满足要求。

  

  最后,刚开始接触爬虫的时候,有的需要webmagic可以满足,有的需要其他方法,需要具体问题具体分析。仍处于探索阶段,本文仅提供解决方案。

   

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线