java获取网页所有网址链接

最近在学习java, 写了个获取网页所有链接(超链接)的例子,实践是最好的学习嘛,用到htmlparser这个包.
htmlparser用于对html页面进行解析的包,很好用的.
htmlparser项目首页:http://htmlparser.sourceforge.net/ , 查找download下载就行了, 就是以下页面:
http://sourceforge.net/projects/htmlparser/files/

解包,要将HTMLParser中lib下的htmlparser.jar和htmllexer.jar加入到classpath中才能使用HTML Parser提供的API。

以下就是java获取网页所有网址链接的代码了:

import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.htmlparser.filters.*;
import org.htmlparser.*;
import org.htmlparser.nodes.*;
import org.htmlparser.tags.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;

public class GetUrl2 {
public static void main(String args[]) throws Exception{

String mystr=getwangye2("https://www.lpfrx.com/");

if (mystr=="")
{
System.out.println("获取网页数据失败,系统退出");
System.exit(1);
}
System.out.println(mystr.getBytes().length);
System.out.println(writetxt(mystr,"GetUrl2.txt"));

mygeturl(mystr);

}

//获取网页数据错误时处理方法,尝试三次
public static String getwangye2(String lasturl) {
int kk=3;
String sss="";
while( kk>0 ) {
sss=getwangye(lasturl);

//!sss.equals("null") 解作 sss !="null" , 但java语法是不能这么写

if (!sss.equals("null")) {
System.out.println("获取网页数据ok");
return sss;
}
System.out.println("获取网页数据错误,继续尝试");
try{
Thread.sleep(1500);
}catch(Exception e){
System.out.println(e);
System.out.println("休眠中");
}

kk--;

}

return "";
}

//获取网页数据
public static String getwangye(String surl) {
String fanstr = "null";
try
{
URL url=new URL(surl);
URLConnection conn=url.openConnection();

conn.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0");

//conn.connect();
InputStream is=conn.getInputStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is,"UTF-8"));

String ss="";
StringBuffer sb = new StringBuffer("");
while((line=br.readLine())!=null){

sb.append(ss+ "/r/n");

}

br.close();
// fanstr=sb.toString();
return sb.toString();
}catch(Exception e){
//System.out.println(e);
Writer w = new StringWriter();
e.printStackTrace(new PrintWriter(w));
String errorstr = "system error: " + w.toString();
System.out.println(errorstr);
return fanstr;
}

}

//写入文本文件
public static String writetxt(String mystr,String xstr) {
try{
FileWriter fw = new FileWriter(xstr);
fw.write(mystr,0,mystr.length());
fw.flush();

return "ok";
}catch(IOException e){
System.out.println (e);

return "no";
}

}

public static void mygeturl(String mysss)throws ParserException {
Parser myParser;
myParser = Parser.createParser(mysss, "utf8");

NodeList list = myParser.parse(new NodeClassFilter(LinkTag.class));
for (int i = 0; i < list.size(); i++) { // System.out.println(list.elementAt(i).toHtml()); String urlLink = ((LinkTag)list.elementAt(i)).extractLink(); String linkName = ((LinkTag)list.elementAt(i)).getLinkText(); // 输出链接 System.out.println(urlLink); //if (urlLink.indexOf("http") == 0) //System.out.println(linkName + ":" + urlLink); //System.out.println(urlLink); } } }

点击这里下载GetUrl2.java源文件

编译环境是:win7,jdk6

还没有处理相对路径的问题.

小弟为java菜鸟,路过的高人请指出错误。

发表在 java | 留下评论

12月9日到溪角吃粥,牛河超级油

12月9日陪朋友搞回忘记的证劵密码,然后晚上到溪角吃粥,例牌都是牌坊旁边那间,不记得叫日日还是夜夜宵夜档了,叫了牛河、萝卜糕、牛肉粥三碟,发觉牛河油到离谱,油到那粉好像刚从油里捞上来似的,那些油好像不用钱一样,夸张到死,在这么节约的年代,这么大手笔,你会想到什么呢,地沟油吗,所以我已经不敢吃下去了,其实萝卜糕也很油呢,最后只把那大碗粥吃完算了.

人老了,消化力差了,所以也不敢乱吃东西,所谓病从口入嘛,况且现在”中地沟“这么活跃,渗入的层面这么广,还是小心点好.

看来以后还是放弃到那店吃算了.
废话结束。

发表在 一般生活 | 留下评论

另一部机做备份,系统debian6

今天在拿多一部旧机做备份机,系统仍然是debian linux, 由于debian6对intel网卡有支持问题,所以只有装了debian5后,然后根据之前遇到【debian的e100/d101m_ucode.bin错误处理方法】处理后在升级到debian6去.

在这里还是记录下debian5升级到debian6的方法吧:
1.首先确认已经给机器配置好了机器名,即检查/etc/hostname文件,如果为空或者不存在:
echo “myhost” > /etc/hostname
hostname -F /etc/hostname

2.然后更改/etc/apt/sources.list文件为下边内容:
deb http://ftp.debian.org/debian/ squeeze main
deb-src http://ftp.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

3.升级apt工具
apt-get install apt dpkg aptitude

4.升级所有软件包
apt-get dist-upgrade

不过可惜这部所谓的备份机只得150G硬盘,只能备份少量重要数据.

发表在 Linux | 留下评论

今天继续linux下软raid出事

本来昨天debian linux下的软raid好好的,但昨晚临睡前,看见某篇文章debian5升级debian6, 于是今天早上手痒,想把部文件服务器的debian5升级,于是按照网上的方法升级,过程一切顺顺利利,当升级后重启机器,软raid又出事啦,不能运行了,那时我觉得眼前一黑,几乎想晕过去了,因为昨晚剪切了win7部机里的好多电影过去,当然算不重要啦。
启动不了,于是进系统后看看什么事,原来在debian5的系统硬盘id由hdc变成sda, 我靠,现在另外两个绿盘ID变成sdb和sdc ,我靠死你!
于是继续
mdadm -S /dev/md0
然后
mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
看见md0启动,然后mount /dev/md0 /mnt/mydata1
又出现昨天的错误,没抄下来,所以没办法记录在这里,然后试试:fsck /dev/md0,还是错误,晕,这次可能又死定了。
总之不能mount, 输入mdadm -D /dev/md0 , 出现resync pending, 无法同步,哎.
继续爬外国的英文资料,看见有人说试试输入,
echo idle > /sys/block/md0/md/sync_action
这应该是强行同步吧.
然后输入命令查看: cat /proc/mdstat
开始同步,又要大概6小时左近,哎,外出先.
今晚回来,看见同步完毕,继续尝试: mount /dev/md0 /mnt/mydata1 , 继续出错,于是尝试: fsck -y /dev/md0 , 哇,终于开始扫描运行了,然后就是等了.

大概大半小时左近吧,看见硬盘灯停下来,继续尝试: mount /dev/md0 /mnt/mydata1, 哎,终于ok了,惊魂结束了,人整个舒服晒,我想如果这次不行,我就不用软raid, 用回两个盘备份了.

其实昨天也是出现过resync pending, 就是没看见上述的方法,或许有可能救回软raid, 这两三天的操作经验真TMD难能可贵了,学朋友说,我升级了,真是心血少点都不行,现在剩下的日子就是看看软raid稳不稳定了,还有就是绿盘软raid啊,据说WD官方说绿盘不适合做raid, 还有就是linux下支持不好,希望不是吧,不过可能应该是那个4k对齐的问题吧.

继续linux下绿盘软raid的白老鼠日子…

上边的方法未必适合路过的各位,都是死马当活马医,大家在绝望时就尝试一下啦.

其实我这次升级,就是为了用python2.6, 因为之前的debian都是2.5版的,据说python2.6的多线程改进了好多,所以多手了,哈哈,果然因小失大.

发表在 Linux | 留下评论

liunx软raid终于给我玩塌了

今天终于部liunx软raid终于给我玩塌了,全部数据救不回来,惨到死,有我的以前日记数据在,和数码相片的存档,好在那些相片我本机也留了一份数据,日记数据也在我另一个硬盘上有留底,不过以前写的程序代码和大量的电影数据全部没了,也包括linode这网站空间上的备份数据,总之好多东西啦,还有以前的4G垃圾网站数据库也没有了,哎…

原因是前几天打开部linux软raid文件服务器copy数据进去,期间不断报ata3 error, 于是remove那个硬盘,应该是sda, 然后重新格式化,然后准备加回去,谁知道居然报以下的错误:
mdadm not large enough to join array

晕,于是新建一个新的强烈,强制一个硬盘建成,即: mdadm -C /dev/md1 -l1 -n1 -f /dev/sda1
然后由md0复制数据过去,然后停掉md0, 把那个剩余的sdb1加到 /dev/md1去,然后执行:mdadm –grow /dev/md1 –raid-devices=2 , 这样就可以了.

但在同步过程中,由于已经是深夜了,于是输入关机指令,准备明天再搞,谁知道第二天开机,找不到md0 , 我靠, 显示的英文信息,大致意思是掉失super block .
期间执行
mke2fs -n /dev/md0
找出块是327680, 然后执行e2fsck -b 327680 /dev/md0
都不行了,后来错误执行mke2fs -j /dev/sda1, 其中一个硬盘,原来这是重新格式化命令,哎,苍天啊,哎。
剩下就是连另一个硬盘都格式化,重建md0了,我的230多G数据啊,突然觉得前半生都给格式化一样,突然有种想跳楼的感觉,好在现在还有数码照片备份和找回以前日记的数据库,感觉才好点了.

还有的就是这两个做软raid1的硬盘是不同型号的绿盘。
还有的就是绿盘的分区方法应该是:
fdisk -H 224 -S 56 -u /dev/sda
由64开始,不要由56开始,
显示出来像下边似的.
/dev/sda1 * 64 1953525167 976762552

还有就是绿盘格式化方法是: mkfs.ext3 -b 4096 /dev/sda1

以后就是这几天很烦的事情了,看来我要找多一部机来备份重要数据,然后软raid1也留一份,电影数据就放软raid1算了.

不是这次搞塌,好大的原因是我操作失误造成,再加上两个绿盘一个是4k分区,另一个乱分,以后要记住这个惨痛教训.

在软raid重建时,一定不要关机,就算正常关机也有可能出问题,一定要停止重建后,才能关机,停止重建命令是:
mdadm /dev/md0 –fail /dev/sda1
mdadm /dev/md0 –remove /dev/sda1

下次开机才重新加上重建,这样应该安全很多了.

发表在 Linux | 留下评论

google地图好玩

发觉在android手机上玩google地图很好玩,应该说是看地图吧,足不出户,跑去日本东京看看,发觉东京地图清晰度很高,把放大按钮按到最大,居然很清晰,而且看见太阳照建筑物得影子,发觉日本的建筑好多屋顶是斜面的,好鬼死古朴.

但不同的城市不同的清晰度,看网上说,google地图不一定全是卫星的,有些是飞机航拍的,然后拼接起来的, 不过对于民用来说,够了.
无聊时连着wifi,然后到各个国家大城市上空游荡都几过瘾.

穷人可能没钱环游世界的嘛,但这样在google地图上到处游荡YY下也是个不错的选择啊,O(∩_∩)O哈哈~

发表在 一般生活 | 留下评论