不知道这个问题算不算网页爬虫 大侠们 你们好,我是一名新手:公司需要我们从网页上扒一些公司的地址和联系方式什么的,我想既然学变成的肯定能用JAVA技术来做一个小程序什么的获取自定义数据。我是感觉如果这个页面在电脑上的话可以利用流读取文件内容然后功过正则表达式匹配获取,但是在网络上怎么做确实一点思路没有。希望知道的大侠们可以提供思路,如果能提供代码供研究那小弟更是感激不尽了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这类问题,CSDN上经常有,基本上分为两步:1、用HttpClient之类的组件,爬取页面,其支持Cookie等;2、用HtmlParser(类似DOM访问)或直接用正则表达式,将爬取下来的页面,进行分析,解析其中所需数据项。 之前在一个帖子里写过的,粘给你参考下吧。package cn.yq;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.net.URL;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.filters.OrFilter;import org.htmlparser.tags.ImageTag;import org.htmlparser.tags.LinkTag;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;public class URLParse { public static void main(String[] args) { try { Parser parser = new Parser("http://slide.sports.sina.com.cn/euro2012/slide_2_31402_29988.html"); parser.setEncoding("gb2312"); //提取链接 NodeFilter frameFilter = new NodeFilter() { public boolean accept(Node node) { if (node.getText().startsWith("frame src=")) { return true; } else { return false; } } }; //过滤出图片 OrFilter orFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new NodeClassFilter(ImageTag.class)); OrFilter linkFilter = new OrFilter(orFilter, frameFilter); NodeList nodelist = parser.extractAllNodesThatMatch(linkFilter); //循环取得image标签 for (int i = 0; i < nodelist.size(); i++) { Node tag = nodelist.elementAt(i); if (tag instanceof ImageTag) { ImageTag image = (ImageTag) nodelist.elementAt(i); String urlstr = image.getImageURL(); InputStream is; OutputStream os; int len; if(urlstr.endsWith("jpg") || urlstr.endsWith("gif")){ System.out.println(urlstr); //下载到本地目录 byte[] buf = new byte[102400]; try { URL url = new URL(urlstr); String suffix = urlstr.substring(urlstr.lastIndexOf("."),urlstr.length()); try { is = url.openConnection().getInputStream(); os = new FileOutputStream("d:/downloadimage/" + i + suffix); while((len = is.read(buf)) != -1){ os.write(buf,0,len); } os.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } } } } }catch (ParserException e) { e.printStackTrace(); } }}另外用迅雷也可以了,不一定非要java写程序。在网页上点右键,“使用迅雷下载全部键接”,选择下载的文件类型,一样可以下载。 先拿到页面信息的String,然后再正则匹配。 url = new URL(adress); connection = (HttpURLConnection)url.openConnection(); // 连接超时自动关闭 connection.setConnectTimeout(60000); String sCurrentLine = ""; StringBuffer sTotalString = new StringBuffer(); isr= new InputStreamReader(connection.getInputStream(), "utf-8"); l_reader = new BufferedReader(isr); while ((sCurrentLine = l_reader.readLine()) != null) sTotalString.append(sCurrentLine); html = sTotalString.toString();//最简单的例子。将 adress 换成你想要爬的网址即可。 j2ee session问题 关于短信猫的使用 struts1 radio如何设置 默认选中一个值 帮帮忙 从tomcat 到 resin 遇到的情况,麻烦给予提示 小区IP 问题 前来求高手解答 你会么? 在OA上如何实现论坛功能 struts里面怎么获得不确定的文本框、下拉框的值? Hibernate 如何存取ORACLE 9I 的CLOB字段数据 一个简单的问题 Struts2使用IF标签判断集合非空无效 web 判断在线的用户数 在两个jsp页面中用?传值的问题
1、用HttpClient之类的组件,爬取页面,其支持Cookie等;
2、用HtmlParser(类似DOM访问)或直接用正则表达式,将爬取下来的页面,进行分析,解析其中所需数据项。
package cn.yq;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;public class URLParse {
public static void main(String[] args) {
try {
Parser parser = new Parser("http://slide.sports.sina.com.cn/euro2012/slide_2_31402_29988.html");
parser.setEncoding("gb2312");
//提取链接
NodeFilter frameFilter = new NodeFilter() {
public boolean accept(Node node) {
if (node.getText().startsWith("frame src=")) {
return true;
} else {
return false;
}
}
};
//过滤出图片
OrFilter orFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new
NodeClassFilter(ImageTag.class));
OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
NodeList nodelist = parser.extractAllNodesThatMatch(linkFilter);
//循环取得image标签
for (int i = 0; i < nodelist.size(); i++) {
Node tag = nodelist.elementAt(i);
if (tag instanceof ImageTag)
{
ImageTag image = (ImageTag) nodelist.elementAt(i);
String urlstr = image.getImageURL();
InputStream is;
OutputStream os;
int len;
if(urlstr.endsWith("jpg") || urlstr.endsWith("gif")){
System.out.println(urlstr);
//下载到本地目录
byte[] buf = new byte[102400];
try {
URL url = new URL(urlstr);
String suffix = urlstr.substring(urlstr.lastIndexOf("."),urlstr.length()); try {
is = url.openConnection().getInputStream();
os = new FileOutputStream("d:/downloadimage/" + i + suffix);
while((len = is.read(buf)) != -1){
os.write(buf,0,len);
}
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
} } }catch (ParserException e) {
e.printStackTrace();
}
}
}另外用迅雷也可以了,不一定非要java写程序。在网页上点右键,“使用迅雷下载全部键接”,选择下载的文件类型,一样可以下载。
先拿到页面信息的String,然后再正则匹配。
url = new URL(adress);
connection = (HttpURLConnection)url.openConnection();
// 连接超时自动关闭
connection.setConnectTimeout(60000);
String sCurrentLine = "";
StringBuffer sTotalString = new StringBuffer();
isr= new InputStreamReader(connection.getInputStream(), "utf-8");
l_reader = new BufferedReader(isr);
while ((sCurrentLine = l_reader.readLine()) != null)
sTotalString.append(sCurrentLine);
html = sTotalString.toString();//最简单的例子。将 adress 换成你想要爬的网址即可。