读书人

(生手)想做个网页抓取的东西大神们

发布时间: 2013-09-06 10:17:17 作者: rapoo

(新手)想做个网页抓取的东西,大神们给个思路吧。
有个任务。需要做一个类似网页采集的东西。我在网上找了点资料。(类似于火车头的东西)
现在能做的是:可以把给定的一个静态网页中的源代码给抓取下来。(生手)想做个网页抓取的东西,大神们给个思路吧
(刚上手,别嫌弃做得丑啊)
但是对于想抓取的东西不能进行提取。求大神们给个思路。
比如:我想在新浪新闻网页中,把所有的新闻标题给抓取下来。
还有对于新闻标题所对应的的链接。这个新闻的正文网页中的内容也抓取出来。
也就是这个节点下的所有网页全都能抓取下来。

最好别弄些太高级的东西。还是新手阶段。
[解决办法]
正则获取了。
[解决办法]
使用httpclient工具包,非常方便,包括可以登录需要登录的网站,比如论坛,什么的。
1,使用httpclient连接网页,包括登录获得session。
2,获取要抓取页面的页面源码。
3,从页面源码中获取需要的信息。这个可以自己手动写个方法,比如需要的xxxx 在一堆html标记中,反过来根据这些标记定位说要的内容。
[解决办法]
貌似bing有个爬虫的框架可以用

还有其他很多,可以搜一下
[解决办法]
做这种东西,你要是觉得学正则麻烦的话,你会发现不学正则会更加困难百倍
[解决办法]
jsoup吧 很好用,可通过DOM 取得节点下的所有内容,还有CSS以及类似于jQuery的操作方法来取出和操作数据
jsoup比httpclient操作要简单的多,只要懂点jquery,很快就上手了。
[解决办法]
我们公司也提取网页的一些标签,我们老大建议我看这两个htmlclient,htmlparser可能对你有帮助。
[解决办法]
我博客有HTMLParser的小例子,楼主可以参考参考
http://blog.csdn.net/jadyer/article/category/1157727
[解决办法]
说穿了还是匹配问题!还是用正则表达式吧,别怕难,不懂就对照api。
[解决办法]

引用:
有个小问题,<p data-client="important audit">[<a href="http://news.sina.com.cn/z/2013storm/" target="_blank">抚顺将明日定为哀悼日悼念遇难者</a> <a href="http://news.sina.com.cn/c/2013-08-23/085028026971.shtml" target="_blank">多名网民散布洪灾谣言被拘</a>]</p>
这一句用我的正则String regularTitle="target=._blank.>([\u4E00-\u9FA5].+?)</a>"。会将 <a href="http://news.sina.com.cn/c/2013-08-23/085028026971.shtml" target="_blank">多名网民散布洪灾谣言被拘</a>]</p>后面的也读进来。如果吧正则改成String regularTitle="target=._blank.>([\u4E00-\u9FA5].+?)</a>";这样则会把后面的遗漏。因为这是在同一行的。有没有什么好的解决方案


你是想分别读取这两个超链接么~~?


[解决办法]

引用:
Quote: 引用:

做这种东西,你要是觉得学正则麻烦的话,你会发现不学正则会更加困难百倍


引用:
jsoup也可以.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.regex.*;
import java.io.*;
import java.net.URL;
import java.sql.*;
class GroupMethod{
public String regularGroup(String pattern,String matcher){
Pattern p=Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(matcher);
if(m.find()){
return m.group(1);
}
else{
return "";
}
}

}

public class TestCatchWeb extends JFrame{
JButton
b1=new JButton("确定"),
b2=new JButton("导入到数据库"),
b3=new JButton("查看数据库");
JTextField
t1=new JTextField(30);
TextArea
t2=new TextArea(20,80);
JLabel
l1=new JLabel("您所查找的网页信息"),
l2=new JLabel("输入您要查找的网页");
String strUrl="http://news.sina.com.cn";
String title;
String urls;
int number;
TestCatchWeb(){
setTitle("网页抓取");
JPanel p=new JPanel();
t1.setText(strUrl);
b1.addActionListener(new B1());
t2.setEditable(false);
//t2.setLineWrap(true);
p.setLayout(new FlowLayout());
p.add(t2);p.add(l1);
p.add(t1);p.add(l2);
p.add(b1);
p.add(b2);
p.add(b3);
add(p);

}
static class WL extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
class B1 implements ActionListener{

public void actionPerformed(ActionEvent e){
catches();
t2.append("标题是:"+title+"\n");
t2.append("url地址是:"+urls+"\n");
t2.append("共收集到"+number+"条信息");
}
}

public void catches(){
strUrl=t1.getText();
BufferedReader br;

try{
URL url=new URL(strUrl);
InputStreamReader isr=new InputStreamReader(url.openStream());
br=new BufferedReader(isr);
String strRead="";
String regularTitle="target=._blank.>([\u4E00-\u9FA5].+)</a>";
String regularUrl="<a href=.(\\w.+). target=._blank.>";
GroupMethod gMethod=new GroupMethod();
int i=0;
while((strRead=br.readLine())!=null){
String strGet=gMethod.regularGroup(regularTitle,strRead);


if(!strGet.equals("")){
title+=strGet+"\n";
}
strGet=gMethod.regularGroup(regularUrl, strRead);
if(!strGet.equals("")){
urls+=strGet+"\n";
i++;
}
}
br.close();
number=i;


}
catch(IOException e){
e.printStackTrace();
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestCatchWeb news=new TestCatchWeb();
news.addWindowListener(new WL());
news.setSize(300,200);
news.setVisible(true);


}

}

简单得用正则写了个代码。但是由于不同标题的格式不一样,所以不能完美提取。还有一些是源代码。(生手)想做个网页抓取的东西,大神们给个思路吧大神们指导下。




楼主无非就是想把一个url地址里面的a标签的文字拿出来并且带上href里面的url地址而已
请问你去查看jsoup了吗? 他完全不需要你写正则进行匹配获取a标签文字和href链接.
里面有提供方法.并且也能找到指定的div块内的内容.你所要做的就是分析你要爬取网页源代码的相同和不同点.

读书人网 >J2SE开发

热点推荐