http://conansjh20.pythonanywhere.com/
(실제 홈페이지에 적용한 예 입니다. 번역은 제외)
1. tkinter를 이용하여 윈도우에서 실행
2. 윈도우 입력창에 가수와 노래 제목을 입력하면 함수 시작
1) 입력 내용 앞에는 "J-Lyric" 뒤에는 "歌詞" 함께 붙여서 구글 검색
J-Lyric에서 가사를 불러온다.
2) 검색 결과창의 첫번째 검색 결과의 링크 불러옴
3) 그 중에 가사 부분만 추출
4) 가사 부분을 googletrans 로 번역하여 추출
5) 3),4)를 표시
포인트
- 구글 검색 결과의 특정 태그값을 찾았지만 결국 첫번째 검색결과의 J-Lyric의 링크 주소로 찾음.
- 의외로 J-Lyric 사이트의 가사 부분은 p 태그로 둘러쌓여 있고 id가 Lyric으로 쉽게 크롤링할수 있었음.
크롤링은 일종의 추리와 같아 html 코드의 원하는 부분만을 특정할 수 있는 공통점, 차이점, 특이점을 찾아내는 것인듯. 결국 많은 홈페이지들을 크롤링해보는 것이 능력을 기르는 방법.
- import 단어를 생략하게 해주는 import * , <br>을 포함한 특정 문자열 추출 방법 .get_text(separator="\n") , 중간중간 문자열로 만드는 str()을 염두하는 것. 등을 새로 배움.
- Regular Expression(정규 표현식)!!! ㅠㅠ
p.s: 번역은 처음엔 파파고를 쓰려 했는데 등록하고 키받고... 절차가 있는걸 보고 급 구글로 선회해서 사용했다.
연습을 실전처럼
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import requests
from bs4 import BeautifulSoup as Soup
import re
from googletrans import Translator as tr
from tkinter import *
window = Tk() # 창 생성
window.title("Conansjh20") # 창 이름
window.geometry("500x700+100+100") # 창 크기
window.resizable(True,True) # 창 크기 조정 가능 여부
def findLyrics(event):
inputInfo = str(entry.get())
keyword = "J-Lyric "+ inputInfo +" 歌詞"
url = "https://google.com/search?q="
googleResult = requests.get(url+keyword)
googleResultPage = googleResult.content
googleAnalysis = Soup(googleResultPage, "html.parser")
a = re.compile(".http://.")
link = googleAnalysis.find("a",{"href":a})
b = link.get("href")
p = re.compile("http://j-lyric.net/\w+/\w+/\w+[.]html")
c = p.search(b)
lyricPage = c.group()
lyrics = requests.get(lyricPage)
lyricsCode = lyrics.content
lyricsCore = Soup(lyricsCode, "html.parser")
lyricsFinal = lyricsCore.find("p",{"id":"Lyric"}).get_text(separator="\n")
# print(lyricsFinal)
final = str(lyricsFinal)
trans = tr()
transLyrics = str(trans.translate(final, dest="ko").text)
# cut = re.compile("[^Translated(src=ja, dest=ko, text=].*[^pronunciation=None]$.*", re.DOTALL)
# cutApply = cut.search(transLyrics)
# transLyricsFinal = cutApply.group()
# print(trans.translate(final, dest="ko"))
label.config(text = lyricsFinal + "\n\n" + transLyrics)
entry = Entry(window, width = 50)
entry.bind("<Return>", findLyrics)
entry.pack()
label = Label(window)
label.pack()
window.mainloop()
|
cs |
정말 결과물을 보면 성의없게 보이지만, 가사의 전체적인 의미만 알면된다.ㅎ