웹스크롤링을 하기 위해서 사용할 파이썬 모듈?
"beautiful soup 모듈"
웬스크롤링을 하는 이유? "데이터 수집을 위해서"
데이터를 수집하는 방법:
1. 웹스크롤링 기술 이용
2. 딥러닝 기술을 이용
html 이란?
Hyper Text Markup Language 의 약자이고
여러개의 태그(Tag)를 연결해서 모아놓은 문서
문제351.
아래의 간단한 html 문서를 만들어 보시오 !
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body>
<p class="title"> 재혁이는 오늘 결석을 하셨습니다. </p>
</body>
</html>
저장시 확장자 html
익스플로러 창에서 에프12 누르면 과정 보임
문제353. 위의 글씨에 밑줄을 그어보시오
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body>
<p class="title"><u><b> 재혁이는 오늘 결석을 하셨습니다.</b></u> </p>
</body>
</html>
<p class="title"><b> 재혁이는 오늘 결석을 하셨습니다.</b> </p>
-------------------------
밑에 한 줄 더 넣으면 두 줄 나오지요~
<b> 는 볼드로, 굵은글씨체 !
<u>는 밑줄 !
b,u 순서 바뀌어도 상관없음
문제354. 위의 글씨체를 이탤릭체로 변경하시오(기울기 주기)
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body>
<p class="title"><u><b><i> 재혁이는 오늘 결석을 하셨습니다.</i></b></u> </p>
</body>
</html>
문제355.
위의 글씨체를 색깔을 파란색으로 변경하시오
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body text="blue">
<p class="title"><u><b><i> 재혁이는 오늘 결석을 하셨습니다.</i></b></u> </p>
</body>
</html>
문제356.
p tag 를 추가해서 제목과 내용을 나누시오
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body text="blue">
<p class="title"><u><b><i> 재혁이는 오늘 결석을 하셨습니다.</i></b></u> </p>
<p class="content"> 오늘 나는 강남의 더킹 미용실에 갔다. 커트는 2만원,
파마는 10만원,
파마를 하고 싶었지만 돈이 없었다.
그래서 커트로 머리를 올렸다 </p>
</body>
</html>
문제357.
위의 html 문서에 링크를 거시오!
<html><head><title> 재혁이의 오늘 일정 </title></head>
<body text="blue">
<p class="title"><u><b><i> 재혁이는 오늘 결석을 하셨습니다.</i></b></u> </p>
<p class="content"> 오늘 나는 강남의 더킹 미용실에 갔다. 커트는 2만원, 파마는 10만원,
파마를 하고 싶었지만 돈이 없었다.
그래서 커트로 머리를 올렸다
<a href="http://cafe.daum.net/oracleoracle"class="cafe1"
id="link1"> 다음카페 </a> </p>
</body>
</html>
에프12 눌러서 소스봐도 되고,
마우스오른쪽버튼->소스보기
문제358.
beautiful soup 모듈을 이용해서 a.html 문서의 title 을 검색하시오
아나콘다 프롬포트 열고
conda install bs4
이제 스파이더 에다가
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a, "html.parser")
print(soup.title)
안되는 사람들은
with open("d:\\jh.html",encoding="UTF-8") as a:
parser : 사람의 언어를 기계어로 바꿨다.
문제359.
위의 결과에서 html 코드는 나오지않고
텍스트만 출력되게 하시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a, "html.parser")
print(soup.title.string)
문제360.
a.html 문서에서 p 태그에 대한 html 을 검색하시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.find('p'))
현재 html 내용을 보면 p 태그는 2개다
위의 p태그만 출력된다.
문제361.
a.html 문서에서 p 태그에 대한 html 을 모두 검색하시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.find_all('p'))
***soup 프린트 하면 htmp 모두 출력된다
문제362.
a.html 문서에서 a 태그에 대한 html 을 모두 검색하시오 !
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.find_all('a'))
문제363.
jh.html 문서에서 a 태그에 href 링크의 url 만 긁어오시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as v:
soup=BeautifulSoup(v,"html.parser")
#print(soup.find_all('a'))
for i in soup.find_all('a'):
#print(i)
print(i.get('href'))
문제364.
jh.html 문서에서 html 소스말고 text 만 출력하시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as v:
soup=BeautifulSoup(v,"html.parser")
print(soup.get_text())
문제365. 위의 텍스트를 한 줄로 나오게 하시오
from bs4 import BeautifulSoup
with open("d:\\jh.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.get_text(" ",strip=True))
문제366.
ecologicalpyramid.html 문서에서 text 만 출력하시오
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.get_text(" ",strip=True))
문제367.
ecologicalpyramid.html 문서에서 number 클라스에 있는
모든 텍스트를 가져오시오
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
print(soup.find_all(class_="number"))
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
result=soup.find_all(class_="number")
for i in result:
print(i.get_text())
문제368.
위의 결과에서 숫자 1000 만 가져오시오
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
result=soup.find_all(class_="number")
for i in result:
if i.get_text()=='1000':
print(i.get_text())
또는
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
result=soup.find_all(class_="number")
print(result)
* 프린트 해서 리스트를 보면, 1000이 들어있는 클래스 위치를 확인한다
result[2]==1000
위 정보를 이용해서
from bs4 import BeautifulSoup
with open("d://ecologicalpyramid.html") as a:
soup=BeautifulSoup(a,"html.parser")
result=soup.find_all(class_="number")
print(result[2].get_text())
문제369.
ebs 의 레이디버그 시청자 게시판의 html 문서 전체를 스크롤링 하는
함수를 작성하시오!
http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106
import urllib.request
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
return result
print(ebs_scroll())
※설명:
링크를 list_url 에 담아서,
request
Request
urllib.request.urlopen(url).read().decode("utf-8")
-> ebs url의 html 문서를 utf-8 로 decode(컴퓨터언어화)해주세요(요청!)
문제370(점심시간문제)
위의 html 문서를 BeautifulSoup 모듈로 파싱을 하고
이 html 문서중에서 텍스트만 가져와서 출력하시오
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
print(soup.get_text())
ebs_scroll()
con 써서 텍스트만 뽑기
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
txt=soup.find_all(class_="con")
return txt
a=ebs_scroll()
for i in a:
print(i.get_text(" ",strip=True))
문제371.
ebs html 문서 중에서 p 태그에 대한 부분만 프린트 하시오 !
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
txt=soup.find_all("p")
print(txt)
ebs_scroll()
문제372.
위의 p태그 중에 class 가 con 에 해당하는 부분만 출력하시오
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
txt=soup.find_all(class_="con")
print(txt)
ebs_scroll()
***con 이 텍스트 부분이다
문제373.
위에서 결과에서 html 말고 텍스트만 가져오시오 !
레이디버그 url 을 크롬에서 열고 에프12 를 누르면 개발자도구 열림
상단 왼쪽 화살표 누름.(파란색으로 변함)
그리고 원하는 텍스트에 커서 갖다대고
누르면
오른쪽 소스창에 코드위치 찾아줌
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result2=soup.find_all(class_="con")
for i in result2:
print(i.get_text())
#print(txt)
ebs_scroll()
문제374. 위의 텍스트를 좀 더 깔끔하고 예쁘게 출력되게 하시오
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result2=soup.find_all(class_="con")
for i in result2:
print(i.get_text().strip())
#print(txt)
ebs_scroll()
문제375.
위의 게시판의 글들을 하나의 리스트에 하나 하나의 요소로 담으시오
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result2=soup.find_all(class_="con")
x=[]
for i in result2:
x.append(i.get_text().strip())
print(x)
#print(txt)
ebs_scroll()
문제376.
위의 결과에서 \r 과 \n 을 삭제하고
params2 리스트에 담기게 하시오 !
import urllib.request
#print(url)
from bs4 import BeautifulSoup
import re
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result2=soup.find_all(class_="con")
params=[]
for i in result2:
params.append(i.get_text().strip())
print(x)
params2=[] # 위 params 는 한 리스트에 여러내용 있어서 바로 re.sub 못해줌
for j in params: # for문으로 하나씩 쪼개서 re.sub 해줘야 함.
params2.append(re.sub("[\r\n]",'',j))
print(params2)
ebs_scroll()
문제377.
위의 게시판에 글 앞에 게시날짜를 앞에 출력되게 하기 위해
게시판의 글 올린 날짜만 가져오는 코드를 작성하시오
import urllib.request
#print(url)
from bs4 import BeautifulSoup
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result2=soup.find_all('span', class_="date")
print(result2)
params=[]
for i in result2:
params.append(i.get_text().strip())
print(params)
ebs_scroll()
문제378.
위의 코드를 수정해서 아래와 같이 출력되게 하시오
import urllib.request
from bs4 import BeautifulSoup
import re
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url=urllib.request.Request(list_url)
result=urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(result,'html.parser')
result1=soup.find_all('span', class_="date")
result2=soup.find_all('p', class_="con") #span, p 써서 맞춰줘야 함.
params1=[]
params2=[]
for i,j in zip(result1,result2):
params1.append(i.get_text().strip())
params2.append(j.get_text().strip())
for i1,i2 in zip(params1,params2):
print(i1,' ',i2)
ebs_scroll()
※ re.sub 안썼는데도 \r\n 이 없는건
없어진거 아님.
re.sub 처리해서 코딩 좀 더 깔끔하게
import urllib.request
from bs4 import BeautifulSoup
import re
def ebs_scroll():
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=1&hmpMnuId=106"
url = urllib.request.Request(list_url)
print (url)
result = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( result, "html.parser")
params1 = []
params2 = []
for link1, link2 in zip( soup.find_all('span', class_="date"),
soup.find_all('p', class_="con") ):
params1.append( link1.get_text() )
params2.append( re.sub('[\r\n]','',link2.get_text()) )
for i1, i2 in zip( params1, params2 ):
print ( i1.strip(), end=' ')
print ( i2.strip() )
ebs_scroll()
문제379.
ebs 레이디버그 게시판 전체의 글들을 전부 스크롤링 하시오 !
레이디버그 홈페이지 들어가서
코멘트의 1번 페이지 링크
코멘트 2번 페이지 링크
모든 페이지 코멘트를 출력해봅시다
import urllib.request
from bs4 import BeautifulSoup
import re
def ebs_scroll():
for i in range(1,17): #페이지수
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page=%s&boardType=13&searchKeywordValue=0&bbsId=10059819&userId=ohsehee5542&searchKeyword=&searchCondition=&searchConditionValue=0&"%(i)
# url 자체에 %가 들어갈 수 있으니까, +str(i)+ 라고 해주는 것도 좋다 !!
url = urllib.request.Request(list_url)
print (url)
result = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( result, "html.parser")
params1 = []
params2 = []
for link1, link2 in zip( soup.find_all('span', class_="date"),
soup.find_all('p', class_="con") ):
params1.append( link1.get_text() )
params2.append( re.sub('[\r\n]','',link2.get_text()) )
for i1, i2 in zip( params1, params2 ):
print ( i1.strip(), end=' ')
print ( i2.strip() )
ebs_scroll()
문제380.
변수의 내용과 리스트의 내용을 파일로 저장되게 하는 방법은??
*변수의 내용을 파일로 저장되게 하는 방법
text='abcdedaefefdfsefsefsefsefe'
f=open("d:\\mydata.txt",'w',encoding='UTF-8')
f.write(text)
f.close()
*리스트의 내용을 파일에 저장하는 방법
text=['ab','gdg','dgryr']
f=open("d:\\mydata.txt",'w',encoding='UTF-8')
for i in text:
f.write('%s\n'%i)
f.close()
문제381.
레이디 버그 게시판의 날짜와 글을 mydata7.txt. 에 저장하시오
import urllib.request
from bs4 import BeautifulSoup
def ebs_scroll():
params=[]
for i in range(1,17):
list_url="http://home.ebs.co.kr/ladybug/board/6/10059819/oneBoardList?c.page="+str(i)+"&hmpMnuId=106"
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
date1=soup.find_all('span',class_='date')
con1=soup.find_all('p',class_='con')
for i,j in zip(date1,con1):
params.append([i.get_text(),j.get_text().strip()]) #이렇게 묶어줘야 같이 들어감
f=open("d:/mytext7.txt",'w',encoding="UTF-8")
for k in params:
f.write("%s %s\n" %(k[0],k[1]))
f.close()
print(ebs_scroll())
묹[382.
text_mining 클래스의 워드 클라우드 그리는 메소드를 실행해서 mytext7.txt를
워드클라우드로 그리시오
class Text_mining:
def __init__(self):
self.a=input('워드 클라우드를 그릴 텍스트를 입력하세요~')
def word_paint(self):
from wordcloud import WordCloud, STOPWORDS # 워드 클라우딩 모듈
import matplotlib.pyplot as plt # 시각화 모듈
from os import path # 텍스트 파일을 불러오기 위한 open, path 하기 위해 os 임포트
import re
d = path.dirname("d://") # 텍스트 파일이 있는 상위 디렉토리를 path로 지정
text = open(path.join(d, "%s"%self.a), mode="r", encoding="UTF-8").read() # 텍스트파일을 open 하는데 reading만 되게 (mode="r"), UTF-8 방식으로 불러옴(UTF-8)
text = re.sub("있다",'',text)
text = re.sub("있는",'',text)
text = re.sub("하지만",'',text)
text = re.sub("것이다",'',text)
text = re.sub("대한",'',text)
text = re.sub("통해",'',text)
text = re.sub("함께",'',text)
text = re.sub("인공지능",'',text)
text = re.sub("hani",'',text)
text = re.sub("한다",'',text)
text = re.sub("하는",'',text)
text = re.sub("위해",'',text)
text = re.sub("co",'',text)
text = re.sub("kr",'',text)
text = re.sub("위한",'',text)
text = re.sub("했다",'',text)
text = re.sub("같은",'',text)
text = re.sub("것은",'',text)
text = re.sub("레이디버그",'',text)
text = re.sub("정말",'',text)
text = re.sub("빨리",'',text)
text = re.sub("블랙캣",'',text)
text = re.sub("너무",'',text)
text = re.sub("시즌",'',text)
text = re.sub("좋아",'',text)
text = re.sub("재밌어요",'',text)
text = re.sub("진짜",'',text)
text = re.sub("언제",'',text)
text = re.sub("그리고",'',text)
text = re.sub("완전",'',text)
wordcloud = WordCloud(font_path='C://Windows//Fonts//BMHANNA_11yrs_ttf', # 폰트 위치(거의 기본적으로 C://Windows//Fonts 안에 들어있습니다)
stopwords=STOPWORDS, background_color='white', # STOPWORDS 옵션은 공백/줄바꾸기 기준으로 단어를 추출해 냅니다
width=1000, # background_color는 워드클라우드 배경색을 나타냅니다. 'black'으로하면 검은색이 됩니다.
height=800, # width와 height는 워드클라우드의 크기를 지정해 줍니다.
colormap='jet').generate(text) # colormap은 워드 색깔을 지정해주는데 첨부한 색감표를 사용하시면 됩니다. generate() 메소드는
plt.figure(figsize=(13,13)) # matplotlib의 pyplot을 figsize로 생성합니다
plt.imshow(wordcloud) # 워드 클라우드 이미지를 pyplot에 띄웁니다
plt.axis("off") # pyplot에 x, y축 표시를 없앱니다.
plt.show()
tm=Text_mining()
tm.word_paint()
입력! mytext7.txt
※ 저축해야 할 웹스크롤링 함수
1. ebs 레이디 버그 게시판 : ebs_scroll()
2. 한겨레 신문사: hani_scroll()
문제383.
한겨레 신문사 홈페이지로 들어가서 인공지능으로 기사검색을 한
url 을 가져오시오 !
검색란에 "인공지능" -> 뉴스더보기 클릭-> 페이지1,2 링크 아래 첨부
1페이지:
***1페이가 0부터 시작인거 주의 !!!!
2페이지:
문제384.
한겨레 신문사에서 인공지능으로 기사검색을 했을 때
나오는 html 문서에서 상세기사 제목을 클릭했을 때
잡히는 url 만 검색하시오
a 로 갖고와도 되긴한데, 너무 잡스러운게 많으니
dt로 갖고온다.
import urllib.request
from bs4 import BeautifulSoup
def hani_scroll():
params=[]
for i in range(0,5):
list_url="http://search.hani.co.kr/Search?command=query&keyword=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&media=news&sort=d&period=all&datefrom=2000.01.01&dateto=2018.12.11&pageseq="+str(i)
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
print(i)
hani_scroll()
여기서 for 문을 한번 더 돌리면
<a~~~>태그에 대한 것만 빼온다
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
for i2 in i:
print(i2)
df태그 안에 있는 요소가 a태그다
이제 여기서 url 만 뽑겠다
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
for i2 in i:
print(i2.get('href'))
문제385.
위의 상세기사 url 들을 params 라는 빈 리스트에 담으시오
import urllib.request
from bs4 import BeautifulSoup
def hani_scroll():
params=[]
for i in range(0,10):
list_url="http://search.hani.co.kr/Search?command=query&keyword=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&media=news&sort=d&period=all&datefrom=2000.01.01&dateto=2018.12.11&pageseq="+str(i)
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
for i2 in i:
params.append(i2.get('href'))
print(params)
hani_scroll()
문제386.
아래의 상세 url의 기사 내용의 텍스트를 스크롤링 하시오
http://www.hani.co.kr/arti/economy/economy_general/868178.html
import urllib.request
from bs4 import BeautifulSoup
def hani_scroll2():
list_url="http://www.hani.co.kr/arti/economy/economy_general/868178.html"
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
result=soup.find_all('div',class_='text')
print(result)
hani_scroll2()
근데, 지저분한것들 정리하고 뽑고싶다 !
↓
result=soup.find_all('div',class_='text')
for i in result:
print(i.get_text())
문제387.
hani_scroll() 함수와 hani_scroll2() 함수를 가지고
인공지능으로 검색한 전체 기사를 다 스크롤링하는 함수를 완성 시키시오.
import urllib.request
from bs4 import BeautifulSoup
def hani_scroll():
params=[]
for i in range(0,10):
list_url="http://search.hani.co.kr/Search?command=query&keyword=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&media=news&sort=d&period=all&datefrom=2000.01.01&dateto=2018.12.11&pageseq="+str(i)
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
for i2 in i:
params.append(i2.get('href'))
return params #params가 아래 함수에 url 로 돌아감.
def hani_scroll2():
list_url=hani_scroll()
for i in range(len(list_url)):
url = urllib.request.Request(list_url[i])
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
result=soup.find_all('div',class_='text')
for i in result:
print(i.get_text())
hani_scroll2()
문제388.(오늘의 마지막 문제)
위의 함수를 가지고 인공지능 기사로 검색한 기사들이
전부 mytext8 이라는 텍스트에 생성되게 하시오
(워드 클라우드 그림을 반 카톡에 올리고 검사받으세요~)
import urllib.request
from bs4 import BeautifulSoup
import re
def hani_scroll():
params=[]
for i in range(0,10):
list_url="http://search.hani.co.kr/Search?command=query&keyword=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&media=news&sort=d&period=all&datefrom=2000.01.01&dateto=2018.12.11&pageseq="+str(i)
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
for i in soup.find_all('dt'): #href 가 있는 태그를 명시한다
for i2 in i:
params.append(i2.get('href'))
return params #params가 아래 함수에 url 로 돌아감.
def hani_scroll2():
param2=[]
list_url=hani_scroll()
for i in range(len(list_url)):
url = urllib.request.Request(list_url[i])
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
result=soup.find_all('div',class_='text')
for i in result:
param2.append(re.sub('[\n\r]','',i.get_text().strip()))
#return param2
f=open('d:\\mytext8.txt','w',encoding='UTF-8')
for j in param2:
f.write('%s\n' %(j))
f.close()
hani_scroll2()
######################################################
class Text_mining:
def __init__(self):
self.a=input('워드 클라우드를 그릴 텍스트를 입력하세요~')
def word_paint(self):
from wordcloud import WordCloud, STOPWORDS # 워드 클라우딩 모듈
import matplotlib.pyplot as plt # 시각화 모듈
from os import path # 텍스트 파일을 불러오기 위한 open, path 하기 위해 os 임포트
import re
d = path.dirname("d://") # 텍스트 파일이 있는 상위 디렉토리를 path로 지정
text = open(path.join(d, "%s"%self.a), mode="r", encoding="UTF-8").read() # 텍스트파일을 open 하는데 reading만 되게 (mode="r"), UTF-8 방식으로 불러옴(UTF-8)
text = re.sub("있다",'',text)
text = re.sub("있는",'',text)
text = re.sub("하지만",'',text)
text = re.sub("것이다",'',text)
text = re.sub("대한",'',text)
text = re.sub("통해",'',text)
text = re.sub("함께",'',text)
text = re.sub("인공지능",'',text)
text = re.sub("hani",'',text)
text = re.sub("한다",'',text)
text = re.sub("하는",'',text)
text = re.sub("위해",'',text)
text = re.sub("co",'',text)
text = re.sub("kr",'',text)
text = re.sub("위한",'',text)
text = re.sub("했다",'',text)
text = re.sub("같은",'',text)
text = re.sub("것은",'',text)
wordcloud = WordCloud(font_path='C://Windows//Fonts//BMHANNA_11yrs_ttf', # 폰트 위치(거의 기본적으로 C://Windows//Fonts 안에 들어있습니다)
stopwords=STOPWORDS, background_color='white', # STOPWORDS 옵션은 공백/줄바꾸기 기준으로 단어를 추출해 냅니다
width=1000, # background_color는 워드클라우드 배경색을 나타냅니다. 'black'으로하면 검은색이 됩니다.
height=800, # width와 height는 워드클라우드의 크기를 지정해 줍니다.
colormap='jet').generate(text) # colormap은 워드 색깔을 지정해주는데 첨부한 색감표를 사용하시면 됩니다. generate() 메소드는
plt.figure(figsize=(13,13)) # matplotlib의 pyplot을 figsize로 생성합니다
plt.imshow(wordcloud) # 워드 클라우드 이미지를 pyplot에 띄웁니다
plt.axis("off") # pyplot에 x, y축 표시를 없앱니다.
plt.show()
tm=Text_mining()
tm.word_paint()
'python' 카테고리의 다른 글
31. 웹크롤링[이미지] (0) | 2019.03.26 |
---|---|
30-2. 웹크롤링[텍스트] (0) | 2019.03.26 |
29. 시간(localtime, strftime, localtime, datetimenow) (0) | 2019.03.26 |
28. 이미지_바이너리(with~as, seek, ospathgetsize, osremove, osrename, oslistdir, globglob, osgetcwd, oschdir, osmkdir, osrmdir, shutilrmtree, ospathexists,ospathisfile) (0) | 2019.03.26 |
27. 텍스트파일(read, readline, readlines, wrtie, writelines) (0) | 2019.03.26 |