■ 162~172 웹스크롤링(텍스트, 이미지)
1. 웹스크롤링 기본 문법
2. ebs 레이디 버그 게시판
3. 한겨레
4. 중앙일보
5. 동아일보
주가에 영향을 주는 요소 빅데이터
-> 기사를 읽는 인공지능 신경망
(미래에셋 로보 어드바이져)
■중앙일보 신문사 사이트 웹스크롤링
문제338.
중앙일보 신문사 사이트에서 인공지능으로 검색한 url 을 알아내시오
페이지1번:
***중앙일보는 페이지넘버 1부터 !
페이지2번:
첫번째 함수
import urllib.request
from bs4 import BeautifulSoup
def jungang_scroll():
params=[]
for i in range(1,2):
list_url="https://search.joins.com/TotalNews?page="+str(i)+"&Keyword=%EB%94%A5%EB%9F%AC%EB%8B%9D&SortType=New&SearchCategoryType=TotalNews"
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('strong', class_="headline mg"): #href 가 있는 태그를 명시한다
for i2 in i:
params.append(i2.get('href'))
print(params) #params가 아래 함수에 url 로 돌아감.
jungang_scroll()
※ 한겨레 함수에서 위3개 수정하면 중앙일보꺼 1번함수 만들어진다.
def jungang_scroll2():
list_url=jungang_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',id="article_body")
for i in result:
print(i.get_text()) # i.get_text().strip() 해주면 더 정리됨
jungang_scroll2()
※ 2번째 함수는 읽고자 하는 기사 위치만 찾아내서 바꿔주면 된다.
※ html 코드에서 id ?
잘 설계된 htmp 코드 문서라면은
id 의 값은 html 문서 내에 단 한 개만 존재한다!!
문제389.
위에서 긁어온 데이터를 mytext9.txt 로 생성하시오
import urllib.request
from bs4 import BeautifulSoup
import re
def jungang_scroll():
params=[]
for i in range(1,2):
list_url="https://search.joins.com/TotalNews?page="+str(i)+"&Keyword=%EB%94%A5%EB%9F%AC%EB%8B%9D&SortType=New&SearchCategoryType=TotalNews"
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('strong', class_="headline mg"): #href 가 있는 태그를 명시한다
for i2 in i:
params.append(i2.get('href'))
return params #params가 아래 함수에 url 로 돌아감.
def jungang_scroll2():
list_url=jungang_scroll()
params2=[]
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',id="article_body")
for i in result:
params2.append(re.sub('[\n\r]','',i.get_text().strip()))
f=open("d:\\mytext9.txt",'w',encoding='utf-8')
for j in params2:
f.write(j)
f.close()
jungang_scroll2()
문제391.
동아일보 신문사에서 딥러닝으로 검색한 기사를 mytext10.txt 에 담는 함수
2개를 생성하시오 !
1페이지 링크:
2페이지 링크:
3페이지 링크:
**15씩 증가
import urllib.request
from bs4 import BeautifulSoup
import re
def donga_scroll():
params=[]
for i in range(2):
list_url="http://news.donga.com/search?p="+str(i*15+1)+"&query=%EB%94%A5%EB%9F%AC%EB%8B%9D&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1"
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
title_url=soup.find_all('p', class_="tit") #href 가 있는 태그를 명시한다
for i in title_url:
params.append(i.find('a').get('href'))
return params #params가 아래 함수에 url 로 돌아감.
print(donga_scroll())
div class_=t 로 해도 나오는 이유: 메인사진에도 링크가 걸려있어서.
그럼 사진없는 기사링크는 안들어가기 때문에
p class_tit 로 하고 , a 를 한번더 find 해줘서 href 찾는다.
다시 전문 함수
import urllib.request
from bs4 import BeautifulSoup
import re
def donga_scroll():
params=[]
for i in range(5):
list_url="http://news.donga.com/search?p="+str(i*15+1)+"&query=%EB%94%A5%EB%9F%AC%EB%8B%9D&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1"
url = urllib.request.Request(list_url)
result = urllib.request.urlopen(url).read().decode("UTF-8")
soup = BeautifulSoup(result,"html.parser")
title_url=soup.find_all('p', class_="tit") #href 가 있는 태그를 명시한다
for i in title_url:
params.append(i.find('a').get('href'))
return params #params가 아래 함수에 url 로 돌아감.
#print(donga_scroll())
def donga_scroll2():
list_url=donga_scroll()
params2=[]
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")
for script in soup(["script", "style"]):
script.decompose() #자바스크립트 제거 하려고 for문 돌림
#li, p도 넣으면 잡다한거 더 지워짐(p는 copyright 지워짐)
result=soup.find_all('div',class_="article_txt")
for i in result:
params2.append(re.sub('[\n\r]','',i.get_text().strip()))
f=open("d:\\mytext10.txt",'w',encoding='utf-8')
for j in params2:
f.write(j)
f.close()
donga_scroll2()
문제392.(오늘의 점심문제)
동아일보 신문사에서 딥러닝으로 검색한 기사로
워드 클라우드를 그리시오(반 카톡으로 그림을 올리세요)
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()
------------------------------
반장코드
#문제 391. 동아일보 신문사에서 딥러닝으로 검색한 기사를 mytext10.txt에 담는 함수 2개를 생성하시오 !
import urllib.request
from bs4 import BeautifulSoup
def donga_scroll():
params = []
f = open('c:\\mytext10.txt', 'w', encoding = 'UTF-8')
for i in range(1, 100, 15):
list_url = "http://news.donga.com/search?p="+ str(i) + "&query=%EB%94%A5%EB%9F%AC%EB%8B%9D&check_news=1&more=1&sorting=1&search_date=1&v1=&v2=&range=1"
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('p', class_='tit'):
result = i.find('a').get('href')
params.append(result)
params2 = []
for i in params:
url = urllib.request.Request(i)
result = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( result , "html.parser")
for i in soup.find_all('div',class_="article_txt"):
for i2 in i(["script"]):
i2.decompose()
params2.append(i.get_text())
for item in params2:
f.write('%s\n' %item)
print('저장되었습니다.')
donga_scroll()
웹스크롤링
1. ebs 레이디 버그 게시판
2. 한겨레
3. 중앙일보
4. 동아일보
5. 네이버 이미지 스크롤링
6. 구글 이미지 스크롤링
7. 다음 이미지 스크롤링
8. bing 이미지 스크롤링
9. 인스타그램 이미지 스크롤링
10. 서울시 응답소 게시판(Javascript 포함)
■ 서울시 응답소 게시판 웹스크롤링
http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp
서울시응답소게시판은 동아일보같은 신문사와는 다르게
하단 페이지 바꿀 때 url이 바뀌지 않는다.
문제397.
서울시 응답소 게시판의 글을 웹스크롤링 하기 위해
페이지 마다 html 모드를 가져올 수 있도록 하시오
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,30):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
#{page:1} 을 urlencode 해서 page=1 로 나오게 한다.
print (request_header)
fetch_list_url()
서울시응답소게시판은 동아일보같은 신문사와는 다르게
하단 페이지 바꿀 때 url이 바뀌지 않는다.
commonPagingPost <--------자바스크립트 함수
commonPagingPost('4', '10', 'Shr01_lis.jsp')
javascript:commonPagingPost('2', '10', 'Shr01_lis.jsp');
function commonPagingPost (Page, Block, Action) {
var Frm = document.mainForm;
Frm.RCEPT_NO.value = "";
Frm.page.value = Page;
Frm.action = Action;
Frm.submit ();
}
-->
</script>
https://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp
자바 스크립트 함수 :
page=1, page=2, page=3 ....,page=29 페이지번호를 자바함수에 제공!
↓
commonPagingPost--->html 코드를 보내준다.
게시글을 클릭했을 때 바뀌는 url ↓
https://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp
lis.jsp 가 vie.jsp 로 바뀌었다.
문제398.
아래의 서울시 응답소 게시판 url과 페이지번호를 commonPagingPost 자바스크립트 함수에
제공을 해야 해당 페이지의 html 코드를 내려받을 수 있다.
해당 페이지의 html 코드를 출력하시오!
"http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
page=1
page=2
page=3
page=4
답 :
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,30):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
print (res)
fetch_list_url()
※설명:
https://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp
자바 스크립트 함수 :
page=1, page=2, page=3 ....,page=29 페이지번호를 자바함수에 제공!
↓
commonPagingPost--->html 코드를 보내준다.
게시글을 클릭했을 때 바뀌는 url ↓
https://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp
lis.jsp 가 vie.jsp 로 바뀌었다.
문제399.
문재인 대통령 기사를 이름은 최재혁으로 사진도 최재혁으로 바꾸시오!
소스열고 해당글자, 사진링크 바꾸면 바뀜
문제400.
게시글의 상세 게시판글을 스크롤링하기 위해서 필요한 상세 url 에
해당하는 코드(자바스크립트 함수에 제공해야 하는 코드)
를 스크롤링 하시오 !
자바스크립트 함수:
JavaScript: onView ('20180801905041')
↑
이 부분을 스크롤링 해야한다.
게시글 누를 때 뜨는 링크가
on view
이 번호를 스크롤링해서 갖고와서 append 해야 한다 .
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
# params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j })
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
print(i.find("a")["href"])
#print (res)
fetch_list_url()
문제401.
위의 코드에서 20180823902658 <-- 이 부분만 추출하시오!
결과:
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
# params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
print(re.sub('[^0-9]','',i.find("a")["href"]))
#print (res)
fetch_list_url()
------------
선생님답:
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
# params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
soup3=i.find("a")["href"]
print(re.search('[0-9]{14}',soup3).group())
# re.search와 group 사용에 집중
#print (res)
fetch_list_url()
문제402.
params 라는 비어있는 리스트 변수에 위의 data 들을 append 시키시오 !
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
soup3=i.find("a")["href"]
params.append(re.search('[0-9]{14}',soup3).group())
print(params)
#print (res)
fetch_list_url()
※설명:
append 는, 해당 페이지의 게시글수의 onview 끼리 중복리스트화해서 담긴다.
[ [ ],[ ],[ ],...,[ ] ]
onview:
각 deep list 가 페이지1, 페이지2, 페이지3....... 이렇게 들어간다.
**상세 게시판 글을 볼 때 필요하다.
---------------
re.sub 로 뽑은 답
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
soup3=i.find("a")["href"]
params.append(re.sub('[^0-9]','',soup3))
#params.append(re.search('[0-9]{14}',soup3).group())
print(params)
#print (res)
fetch_list_url()
문제403.
자바 스크립트 onview 함수에 위의 번호들이 어떻게 제공이 되어야 하는지
확인하시오!
자바스크립트 onview 함수('20180820907144', '상세 게시판 글 url')
↓
상세 게시판 글이 있는 html 문서를 리턴해준다.
function onView (Seq) {
var Frm = document.mainForm;
Frm.RCEPT_NO.value = Seq;
Frm.action = "/Shr/Shr01/Shr01_vie.jsp";
Frm.submit ();
}
RCEPT_NO: 20180820907144
----------위에꺼랑 비교해서 이해해보기
문제404.
RCEPT_NO: 20180820907144 형태로 onview 함수에
/Shr/Shr01/Shr01_vie.jsp 와 같이 제공을 해서
상세 게시판 글의 html 코드를 가져오는
fetch_list_url2() 함수를 생성하시오 !
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
soup3=i.find("a")["href"]
params.append(re.sub('[^0-9]','',soup3))
#params.append(re.search('[0-9]{14}',soup3).group())
return params
#print (res)
#fetch_list_url()
def fetch_list_url2():
params2 = fetch_list_url() #onview 에서 숫자뽑아낸것을 params2에 담고있다.
for i in params2:
detail_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp"
request_header = urllib.parse.urlencode({"RECP_NO": str(i) } )
request_header = request_header.encode("utf-8") #컴퓨터이해를 위해 utf-8
url = urllib.request.Request( detail_url, request_header)
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( res, "html.parser")
print (soup)
fetch_list_url2()
문제405.(점심시간문제)
위의 코드를 이용해서 상세 게시판 글들을 스크롤링하는
코드를 완성하시오
import urllib.request
from bs4 import BeautifulSoup
import os
import re
def fetch_list_url():
params = []
for j in range(1,3):
list_url ="http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print(request_header) page = 1, page=2 ... 가 출력됨
request_header = request_header.encode("utf-8")
# page=1 을 컴퓨터가 이해할수 있는 이진 코드로 변환
#print (request_header) # b'page=1' 출력
url = urllib.request.Request( list_url, request_header )
res = urllib.request.urlopen(url).read().decode("utf-8")
soup=BeautifulSoup(res, "html.parser")
#print(soup)
soup2=soup.find_all("li",class_="pclist_list_tit42")
for i in soup2:
soup3=i.find("a")["href"]
params.append(re.sub('[^0-9]','',soup3))
#params.append(re.search('[0-9]{14}',soup3).group())
return params
#print (res)
#fetch_list_url()
def fetch_list_url2():
params2 = fetch_list_url() #onview 에서 숫자뽑아낸것을 params2에 담고있다.
for i in params2:
detail_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp"
request_header = urllib.parse.urlencode({"RECP_NO": str(i) } )
request_header = request_header.encode("utf-8") #컴퓨터이해를 위해 utf-8
url = urllib.request.Request( detail_url, request_header)
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup( res, "html.parser")
print (soup)
for j in soup.find_all("div", class_="table_inner_desc"):
print(j.get_text().strip())
fetch_list_url2()
******결과가 안나와욥 !!!!!!!!
점심시간 후에 코드 주심
---------------------------------------------
#최종 코드 :
코드 하단을 보면서 정리된거 참고 !!!
import urllib.request # 웹브라우저에서 html 문서를 얻어오기위해 통신하는 모듈
from bs4 import BeautifulSoup # html 문서 검색 모듈
import os
import re
def get_save_path():
save_path = input("Enter the file name and file location :" )
save_path = save_path.replace("\\", "/")
if not os.path.isdir(os.path.split(save_path)[0]):
os.mkdir(os.path.split(save_path)[0])
return save_path
def fetch_list_url():
params = []
for j in range(1, 3):
list_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print (request_header) # 결과 page=1, page=2 ..
request_header = request_header.encode("utf-8")
# print (request_header) # b'page=29'
url = urllib.request.Request(list_url, request_header)
# print (url) # <urllib.request.Request object at 0x00000000021FA2E8>
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup(res, "html.parser")
soup2 = soup.find_all("li", class_="pclist_list_tit42")
for soup3 in soup2:
soup4 = soup3.find("a")["href"]
params.append(re.search("[0-9]{14}", soup4).group())
return params
def fetch_list_url2():
params2 = fetch_list_url()
f = open("d:\\result.txt" , 'w', encoding ="utf-8")
for i in params2:
detail_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp"
request_header = urllib.parse.urlencode({"RCEPT_NO": str(i) })
request_header = request_header.encode("utf-8")
url = urllib.request.Request(detail_url, request_header)
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup(res, "html.parser")
soup2 = soup.find("div", class_="form_table")
tables = soup2.find_all("table")
table0 = tables[0].find_all("td")
table1 = tables[1].find("div",class_="table_inner_desc")
table2 = tables[2].find("div",class_="table_inner_desc")
date = table0[1].get_text()
title = table0[0].get_text()
question = table1.get_text(strip=True)
answer = table2.get_text(strip=True)
f.write("==" * 30 + "\n")
f.write(title + "\n")
f.write(date + "\n")
f.write(question + "\n")
f.write(answer + "\n")
f.write("==" * 30 + "\n")
f.close()
fetch_list_url2()
문제 406.
서울시 응답소 게시판 상세 내용을 추출해서 워드크라우드로 생성하시오
#최종 코드 :
import urllib.request # 웹브라우저에서 html 문서를 얻어오기위해 통신하는 모듈
from bs4 import BeautifulSoup # html 문서 검색 모듈
import os
import re
def get_save_path():
save_path = input("Enter the file name and file location :" )
save_path = save_path.replace("\\", "/")
if not os.path.isdir(os.path.split(save_path)[0]):
os.mkdir(os.path.split(save_path)[0])
return save_path
def fetch_list_url():
params = []
for j in range(1, 3):
list_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp"
request_header = urllib.parse.urlencode({"page": j})
# print (request_header) # 결과 page=1, page=2 ..
request_header = request_header.encode("utf-8")
# print (request_header) # b'page=29'
url = urllib.request.Request(list_url, request_header)
# print (url) # <urllib.request.Request object at 0x00000000021FA2E8>
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup(res, "html.parser")
soup2 = soup.find_all("li", class_="pclist_list_tit42")
for soup3 in soup2:
soup4 = soup3.find("a")["href"]
params.append(re.search("[0-9]{14}", soup4).group())
return params
def fetch_list_url2():
params2 = fetch_list_url()
f = open("d:\\result.txt" , 'w', encoding ="utf-8")
for i in params2:
detail_url = "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_vie.jsp"
request_header = urllib.parse.urlencode({"RCEPT_NO": str(i) })
request_header = request_header.encode("utf-8")
url = urllib.request.Request(detail_url, request_header)
res = urllib.request.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup(res, "html.parser")
soup2 = soup.find("div", class_="form_table")
tables = soup2.find_all("table")
table0 = tables[0].find_all("td")
table1 = tables[1].find("div",class_="table_inner_desc")
table2 = tables[2].find("div",class_="table_inner_desc")
date = table0[1].get_text()
title = table0[0].get_text()
question = table1.get_text(strip=True)
answer = table2.get_text(strip=True)
f.write("==" * 30 + "\n")
f.write(title + "\n")
f.write(date + "\n")
f.write(question + "\n")
f.write(answer + "\n")
f.write("==" * 30 + "\n")
f.close()
fetch_list_url2()
■ 웹스크롤링을 이렇게 해보았습니다 !
1. ebs 레이디 버그 게시판
↓
2. 한겨례 신문사
↓
3. 중앙일보 신문사
↓
4. 동아일보 신문사
↓
5. 네이버 이미지 스크롤링
↓
6. 구글 이미지 스크롤링
↓
7. 다음 이미지 스크롤링
↓
8. Bing 이미지 스크롤링
↓
9. 인스타그램 스크롤링
↓
10. 서울시 응답소 게시판 (javascript 포함)
'python' 카테고리의 다른 글
탐욕 알고리즘 (0) | 2019.03.26 |
---|---|
31. 웹크롤링[이미지] (0) | 2019.03.26 |
30-1. 웹크롤링[텍스트] (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 |