通过html解析网页数据
2016-07-28 14:30
381 查看
最近遇到一个工作需要从新浪财经网页拉取某支股票的当天成交明细,于是乎发现了一个好用的第三方包,在这里跟大家分享一下。
这个包叫Jsoup包,jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。
jar包(点击下载)
中文api文档(点击查看)
接下就来通过我这个项目来说明一下如何解析html
1.分析相应的html代码。
我要拉取的网页是http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh601988&date=2016-07-26&page=41
这是网页上显示的表格:
我们要获取这个股票每个成交时间的成交价和涨跌幅。
查看网页源代码发现主要这几行:
数据是在一个叫datatb1的表格里面。
2.这里源代码有接近有一千行,用Jsoup来解析就比较方便快捷了。
贴上代码:
当然了,这还只是Jsoup的简单实用,具体的其他使用还要去查看API文档。
——————————
总结:
1.自己遇到网络请求获取回来的html是有乱码的,那是因为编码的问题,可以用GBK编码方式。
2.Jsoup用select获取表格时,要在名字前面加上"table."
3.Element对象同过getElementByTag返回的时候Elements的容器。Element对象通过text方法可以去掉标签返回字符串。
这个包叫Jsoup包,jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。
jar包(点击下载)
中文api文档(点击查看)
接下就来通过我这个项目来说明一下如何解析html
1.分析相应的html代码。
我要拉取的网页是http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh601988&date=2016-07-26&page=41
这是网页上显示的表格:
我们要获取这个股票每个成交时间的成交价和涨跌幅。
查看网页源代码发现主要这几行:
数据是在一个叫datatb1的表格里面。
2.这里源代码有接近有一千行,用Jsoup来解析就比较方便快捷了。
贴上代码:
public class GetDataFormNetWork { final String Url = "http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php"; List<StockInfo> mData = new ArrayList<StockInfo>(); int mPage; public void get(final String date , final int page) { mPage = page; new Thread(new Runnable() { //开一个子线程来进行网络请求,用的是OKHttp @Override public void run() { RequestBody body = new FormEncodingBuilder() .add("symbol","sh601988") .add("date",date) .add("page",String.valueOf(page)) .build(); OkHttpClient mOkHttpClient = new OkHttpClient(); final Request request = new Request.Builder() .url(Url) .post(body) .build(); try { Response response = mOkHttpClient.newCall(request).execute(); if (response.isSuccessful()) { String data = new String(response.body().bytes(),"GBK"); Message msg = Message.obtain(); msg.obj = data; handler.sendMessage(msg); } else { } } catch (IOException e) { e.printStackTrace(); } } }).start(); } public class StockInfo { String price;//成交价 String time;//成交时间 String increase;//涨跌幅 public StockInfo(String time, String price,String increase) { this.price = price; this.time = time; this.increase = increase; } } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); String data = (String) msg.obj; Document doc = Jsoup.parse(data); Element table = doc.select("table.datatbl").first();//获取名称为datatb1的表格 Elements elements = table.getElementsByTag("tbody"); for (int i=0;i<elements.size();i++)//遍历容器 { Element tr = elements.get(i); Elements ths = tr.getElementsByTag("th");//获取th标签 Elements tds = tr.getElementsByTag("td");//获取td标签 for(int j=0;j<ths.size()/2;j++) { mData.add(new StockInfo(ths.get(2*j).text(),tds.get(5*j).text(),tds.get(5*j+1).text())); } } mParse.onParse(mData,mPage); } }; private Parse mParse; public interface Parse { abstract public void onParse(List<StockInfo> datas , int page); } public void setParse(Parse parse) { mParse = parse; } }这样子,mData这个容器就存有这一页的表格数据了。注意的是,这里用到的是OkHttp进行网络请求,有兴趣的朋友可以到我的这篇博客来简单了解一下:http://blog.csdn.net/u014686721/article/details/52053304
当然了,这还只是Jsoup的简单实用,具体的其他使用还要去查看API文档。
——————————
总结:
1.自己遇到网络请求获取回来的html是有乱码的,那是因为编码的问题,可以用GBK编码方式。
2.Jsoup用select获取表格时,要在名字前面加上"table."
3.Element对象同过getElementByTag返回的时候Elements的容器。Element对象通过text方法可以去掉标签返回字符串。
相关文章推荐
- W3C api 抓取
- Android开发之利用jsoup解析HTML页面的方法
- Android使用Jsoup解析Html表格的方法
- Jsoup解析HTML实例及文档方法详解
- Java中使用开源库JSoup解析HTML文件实例
- crawler4j抓取页面使用jsoup解析html时的解决方法
- Jsoup获取全国地区数据属性值(省市县镇村)
- java使用Jsoup连接网站超时的解决方法
- Java实现爬虫给App提供数据(Jsoup 网络爬虫)
- python抓取某汽车网数据解析html存入excel示例
- Python HTMLParser模块解析html获取url实例
- 简单网路爬虫(JSoup) + SSH + Mysql保存...
- 如何用Java监控XX挂号平台X科的可用号
- 使用HttpClient和jsoup获取并解析html
- 多线程爬虫遇到的一些问题
- jsoup的Node类
- JSOUP简单应用
- 如何使用Java中HttpClient解析Html中的table
- jsoup网络爬虫抓数据
- java使用jsoup爬取网页内容