从今年的三月份,正式接手项目。主要工作涉及到网页抓取,一直想花时间总结一下。但是博主太懒了..........
要写一篇博客很难的....思路稍有不畅,就没有办法继续写不下去了。网站上高手有的是,总不能拿一篇狗屁不通的文章糊弄大家吧!
我擦咧,把自己心里想的话不小心说出来了!
反正我是鄙视那些花哨的空洞的东西!可以说深恶痛绝。......咳咳.......感觉压力越来越大,装逼的感觉很爽哒.......
看来我多虑了,写的文章不知道有没有人看呢。没人看也罢,权当备忘。(当然希望有人看,有人评论了),每每看到那些大牛写的文章,我都羡慕的口水直流。
围观(●>∀<●): 我擦咧,废话够没?滚粗....... 额,好吧 ....我还没有思路
马上就来。
其实我想对网站的的抓取做一个类型区分<主要是根据我抓取的网站的经验>:
1 普通的网站,主要是要抓取的数据直接可以通过dom的解析获取。这类网站的抓取比较容易,关键点dom的解析。用正则获取想要的数据会很复杂,有更好的方式解决这个问题。这类可以用jsoup(注: jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提 供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操数据),一个简单易用的java解析框架。
2 用js封装数据的网站。这类网站如果直接获取html的话,你要的数据根本得不到。其实一般情况下在浏览器中看到的页面,是渲染过的页面。dom的部分的呈现用js控制的,数据是放js对象中的。针对这种网站,关键是js的解析。由于java本身在1.5版本的时候就已经集成了,一个Rhino的纯java实现的js引擎。可以利用Rhino解释javaScript脚本。又因为js的数据本身的封装的特点,我更喜欢把js对象转化为json处理。(用jackson这个框架和方便)。
3 反爬的网站。有些网站有反扒的策略,这种情况是最麻烦的。需要仔细的分析和琢磨。
要抓取网站上的有用数据,还有一个很重要,抓取的效率,这个问题的解决用多线程和任务队列的东西。
涉及到时候,我会慢慢讲。
基本的页面抓取----主要是jsoup,通常情况下接手到一个新的东西,我会直接在官网上看文档。这其中的原因
只有经历过的人才能明白。胡乱的在网上搜的话,会有各种问题。每个人理解的层次都不一样,这样就有可能曲解原作者的
意图。这不仅仅是因为不同的人的水平参差不齐,更重的要原因是不同的人面对情景不同.我花了很久才明白这个道理。
jsoup结构很简洁。在官网上下载的zip文件中由源码。
1 获取执行的url的document内容: http://www.open-open.com/jsoup/selector-syntax.htm 这里有详细的介绍。
Document doc = Jsoup.connect(url).get();
2 然后你就可以通过提供的一堆的选择器获取你想要的数据:
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements links = doc.select("a[href]"); //带有href属性的a元素
Elements pngs = doc.select("img[src$=.png]");
//扩展名为.png的图片
Element masthead = doc.select("div.masthead").first();
//class等于masthead的div标签
Elements resultLinks = doc.select("h3.
3118



被折叠的 条评论
为什么被折叠?



