您的位置:首页 > 编程语言 > Java开发

一个简单的爬虫实验

2016-05-14 08:49 806 查看
博主一直想研究爬虫,可惜并没有很好的机会,乘着双休日没事,学着写了一个非常简单的小爬虫。

本爬虫使用Jsoup,Jsoup主要是简化连接和选择取内容的代码,抓取的是知乎日报首页上的文章。

其实大家都知道,互联网上显示的内容都最终都是由HTML构成的,说以写爬虫最主要的工作就是分析网页代码的结构,知乎日报首页的结构如下:



经分析得知,每一个col-lg-4类对应着每一列,共有三列,每个wrap或box或link-button类都可以代表一篇文章。我们要做的工作就是将文章里的标题取出来,然后在取出文章对应链接里面的内容。我们现在已经可以用wrap,box,link-button等获得文章的标题(越南「Lady Gaga」参与竞选,倡议尊重同性恋、减少性别歧视)和文章的链接(/story/8287018),下一步就是获取链接里的内容,打开链接,我们得到如下结构:



这里就要看大家想怎么抓取了,content类只包含内容,没有作者,标题。如果想把这些也抓取进来,可以选着question类。我选着的是content类。

代码如下

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class ADemo {

public static void main(String[] args) throws IOException {

Connection.Response connection;
connection = Jsoup.connect("http://daily.zhihu.com/").execute();
Document doc = connection.parse();
//得到文章信息的html块
Elements elements = doc.select("a.link-button");

for(Element element:elements){
//获得文章的标题
System.out.print(element.text()+"|||||");
//获得文章内容的url,然后打开链接
String url = "http://daily.zhihu.com"+element.select("a").attr("href");
Connection.Response connection2;
connection2 = Jsoup.connect(url).execute();
//获得文章的内容
System.out.println(connection2.parse().select(".content").text());
}

}
}


做完这个后,感觉爬虫的难点在于分析html的文档结构,按照什么逻辑去爬取,这两个问题理清楚了,爬虫代码还是很容易写的。

本文还有一个方面没有涉及到,就是动态生成的网页,动态生成的网页通过如上方法是不行的,一般是在一个异步请求返回的json串里,上网查了一下,一般有两种方案,一是模拟用户浏览器操作得到所需要的信息,还有一种是直接分析你需要的异步请求,找到规律,下次有时间在研究研究和大家分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 html java