好久没有上传新的博客了,上上周写出了爬虫,但是因为偷懒和末考,一直到今天才回来写有关这个爬虫的博客。
原来不了解爬虫的时候感觉爬虫好高大上啊,做了之后才发现......哦,好简单......
还有,在这里要感谢一下虎扑大大,感谢他没有封我的IP......
其实爬虫很简单,用到了HttpClient还有HTMLParser......
对HttpClient(基于JDK的HttpConnection)不是很了解,这里不细说只是用一下[尴尬]。使用HTMLParser解析html的页面,基于jsoup解析页面。
jsoup很方便,可以直接使用jquery的标签在页面中查找我们所需要的数据
1 public static void main(String[] args) throws IOException { 2 // TODO Auto-generated method stub 3 HttpClient hc = new HttpClient(); 4 String listHtml = hc.get("url","utf-8"); 5 //System.out.println(listHtml); 6 //讲html 转换成 Doccument 7 Document doc = HTMLParser.parse(listHtml); 8 //取得 Body 标签 9 Elements bodys = doc.getElementsByTag("body"); 10 Element body = bodys.get(0);//得到具体的Body 11 //找到Body下面的 所有Tr元素 12 Elements trs = body.select("tr"); 13 //循环便利 tr 14 for (Element tr : trs) { 15 //去掉带有title&linglei的tr 16 if(tr.hasClass("title") || tr.hasClass("linglei")){ 17 continue; 18 } 19 Element atag = tr.select("td").get(2).select("a").get(0); 20 String ahref = atag.attr("href"); 21 //进入当前页,爬取我所需要的table信息。 22 String dataHtml = hc.get(ahref,"utf-8"); 23 //将获取到的dataHtml(表格数据页)转换成document 24 Document dataDoc = HTMLParser.parse(dataHtml); 25 //获取当前页里的body标签(这里得到的其实是一个集合) 26 Elements dataBodys = dataDoc.getElementsByTag("body"); 27 //list.get()方法获取到集合中的元素,即body标签里的内容 28 Element dataBody = dataBodys.get(0); 29 //获取到body中所有的tr标签(当然这里也是集合) 30 Elements dataTrs = dataBody.select("tr"); 31 //foreach便利所有的tr标签 32 for(Element dataTr:dataTrs){ 33 //去掉带有title,bg_a,away_score,home_score的tr 34 if(dataTr.hasClass("title") || dataTr.hasClass("bg_a") || dataTr.hasClass("away_score") ||dataTr.hasClass("home_score")){ 35 continue; 36 } 37 Element dataTd = dataTr.select("td").get(0).select("a").get(0); 38 //获取到文本内容 39 String dataTdText = dataTd.text(); 40 System.out.println(dataTdText); 41 } 42 } 43 }
黄色部分的url可以放入你想要爬取的网站地址,记住Elements是一个集合,所有的集合方法我们都可以用eg:.get().size()等......
在一个Element里.select()就可以获取到你想要获取的class或id或者是Html标签,.text().attr().html()都可以获取里面我们想要获取到的信息。
这就是简单的爬虫,没有啥算法,没有难点,有的只是找规律,自己去思考到底要如何解析你想要解析的页面信息。