摘要:是一個(gè)開(kāi)源的簡(jiǎn)單的爬蟲(chóng)框架主要是通過(guò)將獲取的網(wǎng)頁(yè)信息封裝成來(lái)進(jìn)行爬取信息。作者也是一個(gè)新手。這篇文章只是提供一個(gè)入門(mén)的思路。開(kāi)啟多少個(gè)線(xiàn)程抓取隔多長(zhǎng)時(shí)間抓取次部分。是用來(lái)抓取元素的連接是指獲取得到的內(nèi)容。并且這個(gè)類(lèi)需要實(shí)現(xiàn)。
Gecco是一個(gè)開(kāi)源的簡(jiǎn)單的java爬蟲(chóng)框架
主要是通過(guò)將獲取的網(wǎng)頁(yè)信息封裝成HtmlBean來(lái)進(jìn)行爬取信息。
作者也是一個(gè)新手。這篇文章只是提供一個(gè)入門(mén)的思路。
如果有不對(duì)的地方,還望指正。
咱們來(lái)爬取一下明星的信息。http://ku.ent.sina.com.cn/sta...
一些解釋性的東西我大都寫(xiě)到注釋里了。
1、入口程序
public class StarIndexPage{ public static void main(String[] args) { String url = "http://ku.ent.sina.com.cn/star/search&page_no=1"; //想要爬取的網(wǎng)站的首頁(yè)地址 HttpGetRequest start = new HttpGetRequest(url); //獲取網(wǎng)站請(qǐng)求 start.setCharset("UTF-8"); GeccoEngine.create() //創(chuàng)建搜索引擎 .classpath("com.yue.gecco") //要搜索的包名,會(huì)自動(dòng)搜索該包下,含@Gecco注解的文件。 .start(start) .thread(5)//開(kāi)啟多少個(gè)線(xiàn)程抓取 .interval(2000) //隔多長(zhǎng)時(shí)間抓取1次 .run(); } }
2、HtmlBean部分。Gecco用到的注解部分很多。
@Gecco(matchUrl = "http://ku.ent.sina.com.cn/star/search&page_no={page}",pipelines {"consolePipeline","starIndexPagePipeline"}) //matchUrl是爬取相匹配的url路徑,然后將獲取到的HtmlBean輸出到相應(yīng)的管道(pipelines)進(jìn)行處理。這里的管道是可以自定義的。 public class StarIndexPage implements HtmlBean { private static final long serialVersionUID = 1225018257932399804L; @Request private HttpRequest request; //url中的page參數(shù) @RequestParameter private String page; //首頁(yè)中的明星板塊的集合,li的集合 @HtmlField(cssPath = "#dataListInner > ul >li") private ListlsStarDetail; //@HtmlField(cssPath = "#dataListInner > ul >li")是用來(lái)抓取網(wǎng)頁(yè)中的相應(yīng)網(wǎng)頁(yè)數(shù)據(jù),csspath是jQuery的形式。 //cssPath獲取小技巧:用Chrome瀏覽器打開(kāi)需要抓取的網(wǎng)頁(yè),按F12進(jìn)入發(fā)者模式。然后在瀏覽器右側(cè)選中該元素,鼠標(biāo)右鍵選擇Copy–Copy selector,即可獲得該元素的cssPath //當(dāng)前的頁(yè)碼,如果當(dāng)前的是有很多頁(yè)碼的話(huà),可以通過(guò)獲取當(dāng)前頁(yè)碼還有總頁(yè)碼,為繼續(xù)抓取下一頁(yè)做準(zhǔn)備 //@Text是指抓取網(wǎng)頁(yè)中的文本部分。@Html是指抓取Html代碼。@Href是用來(lái)抓取元素的連接 @Ajax是指獲取Ajax得到的內(nèi)容。 @Text @HtmlField(cssPath = "#dataListInner > div > ul > li.curr a") private int currPageNum; //相應(yīng)的Getter和Setter方法...省略 }
StarDetail的HtmlBean部分
public class StarDetail implements HtmlBean{ /*//明星的照片 @Image("src") @HtmlField(cssPath = "a > img") prie String PhotoString;*/ //明星的名字 @Html @HtmlField(cssPath ="div > div > h4") private String starNameHtml; //明星的性別 @Text @HtmlField(cssPath = "div > p:nth-child(2)") private String starSex; //明星的職業(yè) @Html @HtmlField(cssPath = "div > p:nth-child(3)") private String professionHtml; //明星的國(guó)籍 @Text @HtmlField(cssPath = " div > p:nth-child(4)") private String nationality; //明星的出生日期 @Text @HtmlField(cssPath = "div > p.special") private String birthday; //明星的星座 @Text @HtmlField(cssPath = "div > p:nth-child(6)>a") private String constellation; //明星的身高 @Text @HtmlField(cssPath = "div > p:nth-child(7)") private String height; ...省略相應(yīng)的set和get方法... }
3、相應(yīng)的pipeline部分。這部分主要是對(duì)獲取的網(wǎng)頁(yè)元素進(jìn)行業(yè)務(wù)處理。也可以對(duì)數(shù)據(jù)進(jìn)行持久化。
@PipelineName("starIndexPagePipeline") //@pipelineName 標(biāo)簽指定了pipline的名字。并且pipeline這個(gè)類(lèi)需要實(shí)現(xiàn)Pipleline。 public class StarIndexPagePipeline implements Pipeline { @Override public void process(StarIndexPage starIndexPage) { List lsStarDetail = starIndexPage.getLsStarDetail(); StringBuilder inputText = new StringBuilder(); for (StarDetail starDetail :lsStarDetail){ String professionHtml=starDetail.getProfessionHtml(); String starNameHtml=starDetail.getStarNameHtml(); Document docName=Jsoup.parse(starNameHtml); String starName=docName.getElementsByTag("a").attr("title").trim(); String starSex = starDetail.getStarSex().trim(); Document doc = Jsoup.parse(professionHtml); String profession="未知"; //有不含a標(biāo)簽的,不含a標(biāo)簽的都是未知的 if(professionHtml.indexOf(" 解析工具推薦
Jsoup
中文文檔:http://www.open-open.com/jsoup/
jsoup是一個(gè)解析Html的開(kāi)源工具。其他可供參考:官方例子:http://www.geccocrawler.com/d...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67317.html
摘要:到了這個(gè)時(shí)候,我們已經(jīng)可以把京東的分類(lèi)首頁(yè)的手機(jī)模塊給抓取下來(lái),并且保存成。 GeccoSpider爬蟲(chóng)例子 前些天,想要用爬蟲(chóng)抓取點(diǎn)東西,但是網(wǎng)上很多爬蟲(chóng)都是使用python語(yǔ)言的,本人只會(huì)java,因此,只能找相關(guān)java的爬蟲(chóng)資料,在開(kāi)源中國(guó)的看到國(guó)內(nèi)的大神寫(xiě)的一個(gè)開(kāi)源的爬蟲(chóng)框架,并下源碼研究了一下,發(fā)現(xiàn)跟官網(wǎng)描述的一樣,夠簡(jiǎn)單,簡(jiǎn)潔易用!有興趣的朋友可以到官網(wǎng)了解下! 我這個(gè)例...
摘要:到了這個(gè)時(shí)候,我們已經(jīng)可以把京東的分類(lèi)首頁(yè)的手機(jī)模塊給抓取下來(lái),并且保存成。 GeccoSpider爬蟲(chóng)例子 前些天,想要用爬蟲(chóng)抓取點(diǎn)東西,但是網(wǎng)上很多爬蟲(chóng)都是使用python語(yǔ)言的,本人只會(huì)java,因此,只能找相關(guān)java的爬蟲(chóng)資料,在開(kāi)源中國(guó)的看到國(guó)內(nèi)的大神寫(xiě)的一個(gè)開(kāi)源的爬蟲(chóng)框架,并下源碼研究了一下,發(fā)現(xiàn)跟官網(wǎng)描述的一樣,夠簡(jiǎn)單,簡(jiǎn)潔易用!有興趣的朋友可以到官網(wǎng)了解下! 我這個(gè)例...
摘要:爬蟲(chóng)又一個(gè)爬蟲(chóng)實(shí)現(xiàn)原文簡(jiǎn)介小強(qiáng)當(dāng)時(shí)不知道為啥選了這么個(gè)名字,又長(zhǎng)又難記,導(dǎo)致編碼的過(guò)程中因?yàn)閱卧~的拼寫(xiě)問(wèn)題耽誤了好長(zhǎng)時(shí)間。我是一個(gè)小強(qiáng)爬蟲(chóng)線(xiàn)程數(shù)健壯說(shuō)到健壯,這里主要體現(xiàn)在以下幾個(gè)方面應(yīng)對(duì)封鎖這里我們使用動(dòng)態(tài)代理來(lái)解決這個(gè)問(wèn)題。 cockroach 爬蟲(chóng):又一個(gè) java 爬蟲(chóng)實(shí)現(xiàn) 原文 簡(jiǎn)介 cockroach[小強(qiáng)] 當(dāng)時(shí)不知道為啥選了這么個(gè)名字,又長(zhǎng)又難記,導(dǎo)致編碼的過(guò)程中因?yàn)閱?..
摘要:的官方網(wǎng)址為,其使用手冊(cè)網(wǎng)址為本次分享將實(shí)現(xiàn)的功能為利用爬取某個(gè)搜索詞語(yǔ)暫僅限英文的百度百科的介紹部分,具體的功能介紹可以參考博客爬蟲(chóng)自制簡(jiǎn)單的搜索引擎。 ??Jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容。它提供了一套非常省力的API,可通過(guò)DOM,CSS以及類(lèi)似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)。Jsoup的官方網(wǎng)址為: https:...
摘要:理解迭代對(duì)象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺寫(xiě)的這篇文章是按照自己的理解做的參考翻譯。比較的是兩個(gè)對(duì)象的內(nèi)容是后端掘金黑魔法之協(xié)程異步后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)先與作者聯(lián)系。 完全理解關(guān)鍵字with與上下文管理器 - 掘金如果你有閱讀源碼的習(xí)慣,可能會(huì)看到一些優(yōu)秀的代碼經(jīng)常出現(xiàn)帶有 with 關(guān)鍵字的語(yǔ)句,它通常用在什么場(chǎng)景呢?今天就來(lái)說(shuō)說(shuō) with 和 上下...
閱讀 3049·2021-11-18 10:02
閱讀 3315·2021-11-02 14:48
閱讀 3384·2019-08-30 13:52
閱讀 527·2019-08-29 17:10
閱讀 2070·2019-08-29 12:53
閱讀 1392·2019-08-29 12:53
閱讀 1018·2019-08-29 12:25
閱讀 2155·2019-08-29 12:17