일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 자바
- LEVEL2
- 프로그래머스
- Github
- level4
- 휴학
- SWEA
- git
- java
- D3
- Matrix Factorization
- 안드로이드스튜디오
- build
- 다시풀기
- Python
- androidstudio
- 어렵다
- 대학원일기
- py
- 대학원
- 컨트리뷰톤
- 파이썬
- MSBuild
- 내휴학생활중의아주큰일
- BFS
- level3
- WebOS
- SQL
- level1
- 컴퓨터비전
- Today
- Total
bit가 눈 앞에서 왔다갔다
우왕~ 공지 떳다! - jsoup 크롤링 본문
크롤링 부분만!
class MyTask extends AsyncTask<Void, String, String>
{
ArrayAdapter<String> adapter;
@Override
protected void onPreExecute() { //어댑터 연결
adapter = (ArrayAdapter<String>)listView.getAdapter();
}
@Override
protected String doInBackground(Void... voids) { //리스트에 정보 추가
final StringBuilder builder = new StringBuilder();
String url1 = "https://software.cbnu.ac.kr/bbs/bbs.php?db=notice";
String my_link = null;
String contents="";
try {
Connection con = Jsoup.connect(url1);
Document doc = con.get();
Elements mElementDatas = doc.select("#body_line > nobr ");
String text = mElementDatas.text();
int i = 0;
for (Element elem : mElementDatas) { //제목, 해당 링크
String my_title = elem.select("a span b").text();
title = my_title;
publishProgress(title);
//내부 내용 크롤링, 내부 내용으로 이어지는 link 추출
my_link = elem.select("a").attr("href");
String url2 = my_link;
Connection con2 = Jsoup.connect("https://software.cbnu.ac.kr" + url2);
Document doc2 = con2.get();
doc2.select("br").append("\\n");
doc2.select("p").prepend("\\n");
doc2.select("div").prepend("\\n");
if(i==0) doc2.select("span").prepend("\\n");
Elements EDatas = doc2.select("#articles"); // articles에서 따옴
String[] result;
for (Element elem2 : EDatas) {
//span, p
String content1 = elem2.select("p").text();
String content2 = elem2.select("span").text();
//String content3 = elem2.select("table").text();
String content =content1;
if(i==0) {
content = content2;
}
String total = content.replaceAll("\\\\n", "\n");
content_arr.add(Jsoup.clean(total,"", Whitelist.none(), new Document.OutputSettings().prettyPrint(false)));
}
i++;
if (i > 15) {
break;
}
}
}catch (IOException e) {
builder.append("Error");
}
return "All the datas were added successfully";
}
jsoup으로 크롤링 구현할 때 이클립스에서 먼저 하고 에뮬레이터로 옮겼다.
뭔가 아직 안드로이드 스튜디오는 좀 낯설고, 결과를 확인하려고 할 때마다 에뮬을 켜야하는, 에뮬 키려면 또 오래 걸리는데, 그거 기다려야하는 게 마음에 안들기도 했다.
물론 그러지 않아도 됐던 방법이 있었을 수도 있었겠지만.
우리 학교 학과 홈페이지에 아쉬운 점이 있었다면 이상하게, 공지글 중에 하나가 글 작성 태그가 다른 거랑 달랐다는 점이었다.
다른 거는 <p>에 있었는데, 어떤 거 하나만 <span>에 있었다.
처음에 그걸 못발견하고 <p>만 생각하면서 했다가 중간에 발견하고 span도 추가했다.
String content2 = elem2.select("span").text();
그리고 크롤링하니까 엔터가 다 날라가 버렸음...
엔터 날라가는거 잡아오기 힘들었다ㅠ
구글링, 유튜브 엄청 찾아봤어야 했다...
그 결과 추가한 게 이거
doc2.select("br").append("\\n");
doc2.select("p").prepend("\\n");
doc2.select("div").prepend("\\n");
if(i==0) doc2.select("span").prepend("\\n");
그리고
String total = content.replaceAll("\\\\n", "\n");
content_arr.add(Jsoup.clean(total,"", Whitelist.none(), new Document.OutputSettings().prettyPrint(false)));
이렇게 하니까 우리 학과 홈페이지 공지글을 깔끔하게 보여줬다.