2010-11-19 112 views
1

我正在考慮啓動一個項目,以便我可以學習更多,並保持我迄今爲止學到的東西不生鏽。Groovy項目(html解析,文件下載,文件創建)

很多項目都是新事物,所以我想我會來這裏尋求建議做什麼和如何去做。

我喜歡photoshop和周圍的東西,所以我想我會混合我的項目與類似的東西。所以我決定我的程序會按照爲Photoshop創建新資源的方式做一些事情,將它們放在我的計算機上的自己的文件夾中。 (來自DeviantArt的現在)

現在我要專注在頁面上是這樣的:

http://browse.deviantart.com/resources/applications/psbrushes/?order=9  

我不流利與理解究竟是什麼在HTML源代碼怎麼回事,這樣實在是有點很難看到發生了什麼。

但可以說我該網頁上,我有以下選項進行選擇:

Sorted by Popular 
Sorted by All Time 
Sorted by 24 Items Per Page 

我的目標是要單獨去每個縮略圖並抓住以下幾點:

The Author 
The Title 
The Description 
Download the File (create folder based on title name) 
Download the Image (place in folder with the file above) 
Create text file with the author, title, and description in it 

我會喜歡爲頁面上的24個項目中的每一個都做到這一點,然後轉到下一頁並執行相同的操作。 (我想只是通過前五頁,因爲我沒有太多的興趣嘗試不太受歡迎的筆刷)

所以,我發佈這個方向感,也許一些幫助如何解析這樣的網頁,以獲得我在找什麼。我相信這個項目會讓我忙一段時間,但我希望它能夠教會我什麼。

任何幫助和建議總是讚賞。

編輯

每一頁的這24個了言:

<div class="tt-a" usericon="http://a.deviantart.net/avatars/s/h/shad0w-gfx.gif" collect_rid="1:19982524"> 
<span class="shad0w" style="background-image: url ("http://sh.deviantart.net/shad0w/x/107/150/logo3.png");"> 
    <a class="t" title="Shad0ws Blood Brush Set by ~Shad0w-GFX, Jun 28, 2005" href="http://Shad0w-GFX.deviantart.com/art/Shad0ws-Blood-Brush-Set-19982524?q=boost%3Apopular+in%3Aresources%2Fapplications%2Fpsbrushes&qo-0">Shad0ws Blood Brush Set</a> 

我的假設是,我想抓住從我的所有信息:

<a class="t" ... > 

由於它包含標題,作者以及下載網址和大圖片所在位置的鏈接。

如果這聽起來是正確的,那麼如何才能獲取頁面上每個對象的信息。 (每頁24個)我會通過使用Cyber​​Neko來設想。我只是不完全確定如何達到適當的位置,並在頁面上的每個人

編輯#2

我有一些測試代碼,看起來像這樣:

divs = [] 
client = new WebClient(BrowserVersion.FIREFOX_3) 
client.javaScriptEnabled = false 

page = client.getPage("http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0") 

divs = page.getByXPath("//html/body/div[2]/div/div/table/tbody/tr/td[2]/div/div[5]/div/div[2]/span/a[@class='t']") 

divs.each { println it } 

的XPath是正確的,但它打印出:

<?xml version="1.0" encoding="UTF-8"?><a href="http://Shad0w-GFX.deviantart.com/ 

藝術/ Shad0ws -Blood-Brush-Set-19982524?q = boost%3Apopular + in%3Aresources%2Fapplicat ions%2Fpsbrushes & qo = 0 「Shad0w Blood Brush Set〜Shad0w-G FX,Jun 28,2005」> Shad0ws Blood Brush Set

你能解釋一下我需要做些什麼才能讓href退出那裏?有沒有簡單的方法來做到這一點與HtmlUnit?

回答

1

滿足上面列出的要求其實很簡單。你可以用一個簡單的約50行的Groovy腳本來完成它。以下是我會去了解它:

第一頁的URL是 http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0

獲得下一個頁面,只需由24增加offset參數的值: http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=24

所以現在您知道如何爲需要使用的頁面構建網址。要下載此網頁使用的內容:

def pageUrl = 'http://browse.deviantart.com/resources/applications/psbrushes/?order=9&offset=0' 

// get the content as a byte array 
byte[] pageContent = new URL(pageUrl).bytes 

// or get the content as a String 
String pageContentAsString = new URL(pageUrl).text 

現在,所有你需要做的是分析出你感興趣作爲將它保存在文件的內容的元素。對於解析,您應該使用HTML解析器,如CyberNekoJericho

+0

謝謝你的迴應。我繼續創建了一些功能,負責構建URL,文件夾和文本文件。我還沒有下載內容並解析html。不過,我在從頁面獲取內容時遇到問題。我要麼服務器返回一個403錯誤(作爲字符串的內容),我得到一個'沒有這樣的屬性'的字節。有什麼建議麼?另外,你確定我可以通過這種方式獲取內容嗎?我不知道內容(文件下載)是否可以通過先點擊圖片訪問? – StartingGroovy 2010-11-19 19:23:58

+0

作爲一個便箋,我意識到在該主頁上的圖像下有一個文本是一個超鏈接。所以我想我可以收集所有這些URL並將它們轉儲到列表中。然後遍歷URL列表(針對5個頁面,即120個URL),並從那裏找到下載鏈接,圖像和作者/標題。困難的部分將通過解析到達這些鏈接。 (我將用我認爲包含我試圖抓取的鏈接的內容編輯我的問題) – StartingGroovy 2010-11-19 21:22:14

+0

每當我嘗試通過html進行解析時,都會收到403錯誤。你知道這可能是爲什麼嗎?經過一番閱讀後,可能是由於用戶代理。我不太清楚如何使用Cyber​​Neko更改用戶代理。 (我可以和HtmlUnit一起使用,但是Cyber​​Neko有沒有辦法?) – StartingGroovy 2010-11-23 22:25:12