2010-11-19 10 views
1

프로젝트를 시작하여 더 많은 것을 배울 수 있고 지금까지 배웠던 것들을 녹슬지 않게 할 수 있습니다.Groovy Project (html 파싱, 파일 다운로드, 파일 생성)

많은 프로젝트가 새로운 일이 될 것이므로 여기에 와서 무엇을해야하는지, 어떻게해야하는지에 대해 조언을 구할 것이라고 생각했습니다.

나는 포토샵을 즐기고 그걸 가지고 놀고있어, 내 프로젝트를 그런 식으로 섞을 것이라고 생각했다. 그래서 내 프로그램이 포토샵을위한 새로운 리소스를 잡아 내 컴퓨터의 폴더에 넣어 줄 것을 결심했습니다. 지금은

(비안 트 알트에서 지금) 나는이 같은 페이지에 초점을 맞추고 자 :

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

나는 HTML 소스에서 진행 정확히 이해 유창하지 않다가 좀 그래서 무슨 일이 일어나고 있는지보기가 어렵다.

그러나

내가 해당 페이지에 나는 말할 수 그리고 난 다음 옵션을 선택했습니다 :

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 

나는 것 :

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

내 목표는 개별적으로 다음 각 썸네일로 이동 잡아 것입니다 페이지의 24 개 항목 각각에 대해 그렇게하고 다음 페이지로 이동하여 동일하게하십시오. (너무 인기가없는 브러쉬를 사용해 보는 데 너무 많은 관심을 가지지 않기 때문에 처음 다섯 페이지를 살펴볼 생각입니다.)

그래서 나는 방향 감각을 위해이를 게시하고 있습니다. 그러한 페이지를 구문 분석하여 내가 원하는 것을 얻는 방법에 대한 도움. 나는이 프로젝트가 나를 잠시 바쁘게 할 것이라고 확신하지만, 나는 그것이 나에게 사물을 가르치는 데 유용하게되기를 바라고있다.

모든 도움과 제안은 언제나 감사하겠습니다.

.

. 각 페이지까지 이들의 24 구성되어 편집

은 가입일 :

<a class="t" ... > 

:

<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> 

내 가정이다, 나는 모든 내 정보를 잡아하려면 제목, 작성자 및 다운로드 URL과 큰 이미지가있는 곳의 링크가 포함되어 있습니다.

이 정보가 정확하다면 페이지의 각 개체에 대한 정보를 얻는 방법을 알려주세요. (24 페이지 당) CyberNeko를 사용한다고 가정합니다. 나는 정확한 레벨에 도달하는 방법과 페이지에있는 각각의 레벨에 대해 정확히 모르겠다.

.

.

편집 # 2

I는 다음과 같습니다 몇 가지 테스트 코드를 가지고 :

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 = 부스트 % 3Apopular + % 3A 소스 % 2 적용 가능 이온 % 2Fpsbrushes & qo = 0 "class ="t "title ="Shad0ws 블러드 브러시 세트 ~ Shad0w-G FX, 2005 년 6 월 28 일 "> Shad0ws 블러드 브러쉬 세트

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

을 그래서 지금 여기에 내가 그것에 대해 갈 것입니다 방법 함께 작업해야하는 페이지의 URL을 구성하는 방법을 알고 있습니다. 이 페이지 사용의 콘텐츠를 다운로드하려면

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 

지금 당신이해야 할 모든 당신이 그것을 저장 파일에 관심있는 내용의 요소를 구문 분석이다. 구문 분석을 위해서는 CyberNeko 또는 Jericho과 같은 HTML 구문 분석기를 사용해야합니다.

+0

응답 해 주셔서 감사합니다. URL, 폴더 및 텍스트 파일을 구성하는 몇 가지 기능을 만들었습니다. 나는 아직 내용을 다운로드하고 html을 파싱해야한다. 그러나 페이지에서 콘텐츠를 가져 오는 데 문제가 있습니다. 나는 서버가 403 오류 (문자열에 대한 내용)를 반환하고 바이트에 대해 '그러한 속성 없음'을 얻습니다. 어떤 제안? 또한, 내가 그런 식으로 콘텐츠를 얻을 수있을거야? 이미지를 먼저 클릭하면 내용 (파일 다운로드)에 액세스 할 수 있다는 것을 알지 못했습니까? – StartingGroovy

+0

부수적으로, 메인 페이지의 이미지 아래에 하이퍼 링크 인 텍스트가 있다는 것을 깨달았습니다. 그래서 나는 모든 URL을 모아 목록에 버릴 수 있다고 생각합니다. 그런 다음 URL 목록 (120 페이지의 5 페이지)을 반복하여 다운로드 링크, 이미지 및 작성자/제목을 찾으십시오. 어려운 부분은 링크를 통해 파싱됩니다. (나는 내가 움켜 잡고있는 링크를 포함하고 있다고 믿는 것으로 내 질문을 편집 할 것이다.) – StartingGroovy

+0

html을 통해 구문 분석하려고 할 때마다 403 오류가 발생합니다. 왜이게 될지 아십니까? 읽은 후 사용자 에이전트가 원인 일 수 있습니다. CyberNeko로 사용자 에이전트를 변경하는 방법을 잘 모르겠습니다. (HtmlUnit으로 할 수 있지만 CyberNeko와 함께 할 수있는 방법이 있습니까?) – StartingGroovy