`
ruantongsheng
  • 浏览: 21853 次
  • 来自: ...
社区版块
存档分类
最新评论

par ser htm l

 
阅读更多
package com.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.util.NodeList;


public class HtmlParser {

public static Object parserLockObj=new Object();
public static Object getHtmlLockObj=new Object();
public static List<String> BeingDownloadWordList=new ArrayList<String>();
public static List<String> DownloadedWordList=new ArrayList<String>();

public static void main(String[] args) {
try {
initial();
initialList();

GetHtmlThread gt=new GetHtmlThread();
ParserHtmlThread pt=new ParserHtmlThread();
gt.start();
pt.start();

} catch (Exception e) {
e.printStackTrace();
}
}
public static void parserHtml(String word)throws Exception{
StringBuffer parsedText=new StringBuffer();
StringBuffer newWord=new StringBuffer();
String d=getProjectRootPath()+"newhtml/"+word+".html";
Parser parser=new Parser(readFile(d));
NodeFilter filter = new HasAttributeFilter("class","tab_content");
        NodeList nodes = parser.extractAllNodesThatMatch(filter);
        System.out.println(nodes.size());
int len=nodes.size();
for(int i=0;i<len;i++){
//outputAll1(nodes.elementAt(i));
Parser parserSub=new Parser(nodes.elementAt(i).toHtml());
NodeFilter   textFilter   =   new   NodeClassFilter(TextNode.class);
NodeList nl=parserSub.extractAllNodesThatMatch(textFilter);
for(int j=0;j<nl.size();j++){
String s=nl.elementAt(j).getText();
if(s!=null&&!s.trim().equals("")){
s=s.replace("&nbsp;","");
boolean isSeq=Pattern.matches("[0-9\\.]{1,3}",s);
if(isSeq){
//System.out.print(s);
parsedText.append(s).append("\r\n");
}else{
if(isWord(s)){
BeingDownloadWordList.add(s);
newWord.append(s.trim()).append("\r\n");
}
//System.out.println(s);
parsedText.append(s).append("\r\n");
}

}
}
System.out.println("\n\n\n###############################################");
}
writeFile(parsedText.toString(),getProjectRootPath()+"text/"+word+".txt");
appendWordToAllWordFile(newWord.toString());

}
private static void writeFile(String content,String path)throws Exception{

BufferedWriter w=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));
w.write(content);
w.flush();
w.close();

}
private static String readFile(String path)throws Exception{
BufferedReader r=new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String result="";
while(r.ready()){
result+=r.readLine();
}
return result;
}

private static boolean isWord(String s)throws Exception{
if(s==null||s.trim().equals("")){
return false;
}else{
s=s.trim();
Pattern p=Pattern.compile("[a-zA-Z]*");
return p.matches("[a-zA-Z]*",s);
}

}

private static void initial()throws Exception{
String rootPath=getProjectRootPath();
rootPath=rootPath.replace("\\","/");
rootPath=rootPath.trim();
if(rootPath.startsWith("/")){
rootPath=rootPath.substring(1);
}
File newFile=new File(rootPath+"newhtml");
File textFile=new File(rootPath+"text");

if(!newFile.exists()){
newFile.mkdirs();
}if(!textFile.exists()){
textFile.mkdirs();
}
System.out.println(rootPath);
}
public static  String getProjectRootPath(){
String projectRootPath="";
try {
projectRootPath=HtmlParser.class.getResource("/").getPath();
projectRootPath=projectRootPath.substring(0,projectRootPath.length()-1);
if(projectRootPath.endsWith("bin")){
projectRootPath=projectRootPath.substring(0,projectRootPath.length()-4)+  File.separator;

}else{
projectRootPath=projectRootPath +  File.separator ;

}

if(projectRootPath!=null&&projectRootPath.indexOf("%20")!=-1){
projectRootPath=projectRootPath.replace("%20", " ");
}
} catch (Exception e) {
e.printStackTrace();
}
return projectRootPath;
}



private static void appendWordToAllWordFile(String content)throws Exception{
String path=getProjectRootPath()+"text/AllWord.txt";
BufferedWriter w=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path, true)));
w.write(content);
w.flush();
w.close();
}
private static void initialList()throws Exception{
String path=getProjectRootPath()+"text/AllWord.txt";
File f=new File(path);
if(f.exists()){
BufferedReader buf=new BufferedReader(new InputStreamReader(new FileInputStream(path)));
while(buf.ready()){
String line=buf.readLine();
if(line!=null&&!line.trim().equals("")){
line=line.trim();
BeingDownloadWordList.add(line);
}
}
}
}

public static boolean newHtmlIsExist(String word)throws Exception{
String path=getProjectRootPath()+"newhtml/"+word+".html";
File f=new File(path);
return f.exists();
}
public static String getContent(String word)throws Exception{
String result="";
if(!newHtmlIsExist(word)){
Display display = new Display();  
    final Shell shell = new Shell(display);  
    final Browser browser = new Browser(shell, SWT.NONE);
    try {
    String url="http://www.iciba.com/" +word;




    browser.setToolTipText("process料");
    browser.setUrl(url);
   
    browser.addProgressListener(new ProgressListener() {
public void completed(ProgressEvent paramProgressEvent) {
//System.out.println(browser.getText());
browser.setToolTipText("completed");
}
public void changed(ProgressEvent paramProgressEvent) {}
});
    while (!shell.isDisposed()&&!browser.getToolTipText().equals("completed")) {  
    // while (!shell.isDisposed()) {
        if (!display.readAndDispatch()){
        //System.out.println(browser.getText());
          display.sleep();
        }
      }
    result=browser.getText();
    saveFile(result, word);
    DownloadedWordList.add(word);
    //System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}finally
{
browser.dispose();
shell.dispose();
//shell.close();
display.dispose();
//display.close();

}

    return result;
}else{
return "";
}

   
}
private static void saveFile(String content,String name)throws Exception{
BufferedWriter w=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(getProjectRootPath()+"newhtml/"+name+".html")));
w.write(content);
w.flush();
w.close();
}
}

class ParserHtmlThread extends Thread{
HtmlParser hp = new HtmlParser();
public void run() {
try {
while(true){
if(HtmlParser.DownloadedWordList.size()>0){
String word=HtmlParser.DownloadedWordList.remove(0);
HtmlParser.parserHtml(word);
}else{
Thread.sleep(500);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class GetHtmlThread extends Thread {
HtmlParser hp = new HtmlParser();
public void run() {
try {
while (true) {
if (HtmlParser.BeingDownloadWordList.size() > 0) {
String word = HtmlParser.BeingDownloadWordList.remove(0);
HtmlParser.getContent( word);
} else {
Thread.sleep(500);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
评论

相关推荐

    64位win7pl2303驱动,ch341par,ch341ser,ch341ser,win7_64_usb_asp

    标题中的“64位win7pl2303驱动,ch341par,ch341ser,ch341ser,win7_64_usb_asp”指的是针对64位Windows 7操作系统的一个驱动程序集合,这些驱动主要用于解决PL2303系列USB转串口芯片的通信问题。在IT领域,驱动程序...

    ser2net 2.10.0交叉编译OK

    《ser2net 2.10.0 交叉编译详解及应用》 ser2net 是一款开源软件,它允许远程网络设备通过TCP/IP协议访问串行端口,实现串行通信的网络化。在2.10.0版本中,开发者对软件进行了更新和优化,提供了更好的稳定性和...

    USB-232(usb2.0-ser!)CH341SER 驱动

    USB-232(usb2.0-ser!)CH341SER 驱动。

    CH341SER-Win10.ZIP_ch341ser.vxd_ch341serwin10_win10 CH341SER.INF

    标题中的"CH341SER-Win10.ZIP"是一个针对Windows 10操作系统的压缩文件,包含CH341设备的驱动程序。CH341设备通常是一种USB到串口/并口的转换器,广泛用于各种硬件开发、编程或者数据通信任务。这个驱动程序是为了...

    PHP连接串口程序php_ser

    void ser_open( string port, int baudrate, int databits, string parity, float stopbits, string flowcontrol ) string ser_isopen( void ) void ser_write( string data ) string ser_read( int chars_no ) ...

    win7_driver.zip_CH341_CH341SER.INF wi_CH341SER.INF win7_ch341 l

    "CH341SER.INF"和"wi_CH341SER.INF"是驱动程序的关键文件,INF文件在Windows系统中是安装驱动时必要的配置文件,它包含了设备驱动安装所需的信息,比如硬件ID、设备类、驱动位置等。 描述中提到"ch341芯片的win7...

    SER29-datasheet用户手册-PDF

    - **重量**:文档还提供了不同型号的重量信息,如SER2915L系列的重量约为28.5克,SER2915H系列为29.7克,而SER2918H系列则为35.7克。 - **端子材料**:文档指出端子材料采用符合RoHS标准的锡银镀层覆盖铜材,基垫则...

    CH341SER驱动下载

    标题中的“CH341SER驱动下载”表明我们要讨论的是关于CH341SER设备的驱动程序,这是连接计算机与各种串行设备的关键软件组件。CH341SER驱动是针对CH341系列USB到串行接口转换器的,主要用于实现USB端口与标准串行...

    最新CH341SER 驱动

    CH341SER驱动是针对CH341系列USB转串口芯片的驱动程序,它使得用户能够通过USB接口连接并通信串行设备,如单片机开发板、调制解调器、GPS模块等。这个驱动对于那些使用串口下载线进行固件更新、程序烧录或数据传输的...

    CH341SER驱动

    ch341ser驱动(usb转串口驱动工具)是一款很优秀好用的usb到串口的驱动工具。ch341ser驱动功能强大,简单易用,使用后可以帮助用户更轻松便捷的进行USB转串口操作。ch341ser是一个USB到串口的芯片,连接时需要转换有线...

    USB-232(usb2.0-ser!)CH341SER_XP_WIN7

    )CH341SER_XP_WIN7"中,"USB-232"指的是该设备的型号,"usb2.0-ser!"暗示它基于USB 2.0协议,并且专为串行通信设计。"CH341SER"是这款USB转串口芯片的名称,通常由中国深圳芯邦科技(WCH)制造。"XP_WIN7"则表明这个...

    USB 2.0-ser驱动,完全可用

    USB 2.0-ser驱动是计算机硬件连接与通信的关键组件,尤其对于那些依赖于串行接口(如RS-232)的设备来说至关重要。USB 2.0标准是在2000年推出的,它提供了比其前身USB 1.1更高的数据传输速度,最大可达480 Mbps,是...

    ser2net源代码

    openwrt.org/ser2net学习用

    SER-U 汉化包

    【标题】SER-U 汉化包 在IT领域,FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,广泛应用于网站文件上传、下载以及数据交换。而SER-U是一款非常经典的FTP服务器软件,尤其在早期互联网...

    CH341SER_ch341SER_新代码_

    标题中的"CH341SER_ch341SER_新代码_"表明这是一款与CH341SER相关的软件更新或驱动程序,其中包含了新的代码优化。CH341SER通常是指CH341系列USB转串口芯片的驱动程序,这款芯片广泛用于各种电子设备,如Arduino...

    USB-232(usb2.0-ser)CH341SER.rar

    标题中的"USB-232(usb2.0-ser)CH341SER.rar"指的是一个包含CH341SER驱动程序的压缩文件,用于将USB 2.0设备转换为串口通信。这个驱动程序特别适用于USB 2.0_ser(可能是USB to Serial)接口的硬件,例如U232-P9型号...

    usb2.0-ser! CH34x 驱动程序 WIN10亲测.zip

    标题中的“usb2.0-ser! CH34x 驱动程序 WIN10亲测.zip”表明这是一个针对Windows 10操作系统的USB 2.0串行接口(USB2.0-ser!)和CH34x系列芯片的驱动程序。CH34x系列芯片是由韦尔奇拉科技公司(WCH)生产的,常用于...

    CH341SER_LINUX_2_ch341SER_linux_

    标题“CH341SER_LINUX_2_ch341SER_linux_”暗示了这是一个与CH341SER驱动相关的更新或修正,适用于Linux操作系统,特别是针对ARM架构的Linux平台。描述中提到的问题是,在内核中使用原生的`ch34x.c`驱动时遇到了异常...

    华为USB SER驱动

    我的mate10Pro变成黑砖,插入电脑后手机没反应,但是电脑设备管理器多出一个usb ser设备,未安装驱动,在网上找了一堆驱动,一直安装不成功,后来都放在一个文件夹内,更新驱动,让电脑自己到文件夹内搜索,终于安装...

    USB转串口驱动程序(包含CH341SER和PL2303)

    这个压缩包包含两种常见的USB转串口芯片的驱动程序:CH341SER和PL2303。 **CH341SER驱动程序** 是为基于CH341芯片的USB转串口设备设计的。CH341芯片由韦尔奇拉电子科技公司制造,广泛应用于各种USB到UART桥接器中。...

Global site tag (gtag.js) - Google Analytics