파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장
아래 준비
import re
import requests
from pathlib import Path
import requests
from bs4 import BeautifulSoup
작업 폴더 만들기
output_folder = Path('作業フォルダ')
output_folder.mkdir(exist_ok=True)
yahoo 날씨 데이터를 얻고 싶습니다.
requests를 사용하여 html의 요소를 가져옵니다.
url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html'
html = requests.get(url).text
이대로 읽기 어렵기 때문에 BeautifulSoup에서 구조를 다시 작성
soup = BeautifulSoup(html, 'lxml')
soup를 확인하여 취득하고 싶은 정보가 어디에 있는지 확인한다.
이번에는 오늘 내일의 날씨를 얻고 싶다.
ctrl + F로 해당 단어를 검색합니다.
class="yjMt"를 확인할 수 있었다.
soup에서 요소를 지정하여 얻기
today = soup.select('.yjMt')
div가 얻고 싶을 때는 select('div')
class가 취득하고 싶을 때는('.class')
id가 얻고 싶을 때는 ( '#id')
img가 취하고 싶을 때는 select보다soup.find_all('img') 쪽이 편리할지도
취득한 내용을 확인
today
[<h2 class="yjMt">今日明日の天気</h2>,
<h2 class="yjMt">週間天気</h2>,
<h2 class="yjMt">ピンポイント天気</h2>]
세 가지 요소가 잡혀 버리기 때문에, list의 번호를 지정해 꺼낼 필요가 있다.
같은 요령으로 최고 최저 기온 획득
high = soup.select('.high')
low = soup.select('.low')
low
[<li class="low"><em>25</em>℃[+2]</li>,
<li class="low"><em>28</em>℃[+3]</li>]
오늘 내일의 정보가 들어오고 있으므로 list의 번호를 지정.
불필요한 문자열을 제거합니다.
today_low= str(low[0]).replace('<li class="high"><em>', '').replace('</em>', '').replace('</li>', '')
이미지 얻기
웹사이트에서 이미지를 마우스 오른쪽 버튼으로 클릭
url을 복사하고 ctrl + F로 해당 url을 검색합니다.
class가 pict라고 알았다
pict = soup.select('.pict')
pict
[<p class="pict"><img alt="曇時々雨" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png"/>曇時々雨</p>,
<p class="pict"><img alt="曇のち晴" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png"/>曇のち晴</p>,
<div class="cmnMod pict">
<ul>
<li>
<dl>
<dt>雨雲レーダー</dt>
<dd><a data-ylk="slk:zmradar; pos:1" href="//weather.yahoo.co.jp/weather/zoomradar/?lat=35.6965&lon=139.4472&z=10"><img alt="雨雲の動き" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/raincloud/1599021000/202010-0000-pf1300-20200902133000.gif?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>天気図</dt>
<dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="天気図" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/chart_v2/1599012878/WM_ChartA_20200902-090000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>気象衛星</dt>
<dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="気象衛星" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/satellite_v2/1599022735/WM_H-JPN-IR_20200902-140000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li>
</ul>
</div>]
이미지의 URL 만 얻고 싶습니다.
이미지 url의 전후에 「"」가 있으므로, 이것을 지정 문자로서 문자 단락짓는다.
구분 후의 리스트로부터 해당 url이 있는 리스트 번호를 지정한다.
sp = re.split('"', str(pict))
sp[7]
'https://s.yimg.jp/images/weather/general/next/size150/203_day.png'
URL에서 이미지를 꺼내 PIL로 표시
from PIL import Image
from io import BytesIO
img = requests.get(sp[7]).content
today_pict = Image.open(BytesIO(img))
today_pict
별해
a 태그에서 img 만 꺼내는 방법도 있습니다.
a_img = soup.select('a > img')
꺼내기에서 split하여 확장자 일치로 이미지로 좁히기
str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]
저장
today_pict.save("today_pict.png")
이상
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import re
import requests
from pathlib import Path
import requests
from bs4 import BeautifulSoup
output_folder = Path('作業フォルダ')
output_folder.mkdir(exist_ok=True)
yahoo 날씨 데이터를 얻고 싶습니다.
requests를 사용하여 html의 요소를 가져옵니다.
url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html'
html = requests.get(url).text
이대로 읽기 어렵기 때문에 BeautifulSoup에서 구조를 다시 작성
soup = BeautifulSoup(html, 'lxml')
soup를 확인하여 취득하고 싶은 정보가 어디에 있는지 확인한다.
이번에는 오늘 내일의 날씨를 얻고 싶다.
ctrl + F로 해당 단어를 검색합니다.
class="yjMt"를 확인할 수 있었다.
soup에서 요소를 지정하여 얻기
today = soup.select('.yjMt')
div가 얻고 싶을 때는 select('div')
class가 취득하고 싶을 때는('.class')
id가 얻고 싶을 때는 ( '#id')
img가 취하고 싶을 때는 select보다soup.find_all('img') 쪽이 편리할지도
취득한 내용을 확인
today
[<h2 class="yjMt">今日明日の天気</h2>,
<h2 class="yjMt">週間天気</h2>,
<h2 class="yjMt">ピンポイント天気</h2>]
세 가지 요소가 잡혀 버리기 때문에, list의 번호를 지정해 꺼낼 필요가 있다.
같은 요령으로 최고 최저 기온 획득
high = soup.select('.high')
low = soup.select('.low')
low
[<li class="low"><em>25</em>℃[+2]</li>,
<li class="low"><em>28</em>℃[+3]</li>]
오늘 내일의 정보가 들어오고 있으므로 list의 번호를 지정.
불필요한 문자열을 제거합니다.
today_low= str(low[0]).replace('<li class="high"><em>', '').replace('</em>', '').replace('</li>', '')
이미지 얻기
웹사이트에서 이미지를 마우스 오른쪽 버튼으로 클릭
url을 복사하고 ctrl + F로 해당 url을 검색합니다.
class가 pict라고 알았다
pict = soup.select('.pict')
pict
[<p class="pict"><img alt="曇時々雨" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png"/>曇時々雨</p>,
<p class="pict"><img alt="曇のち晴" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png"/>曇のち晴</p>,
<div class="cmnMod pict">
<ul>
<li>
<dl>
<dt>雨雲レーダー</dt>
<dd><a data-ylk="slk:zmradar; pos:1" href="//weather.yahoo.co.jp/weather/zoomradar/?lat=35.6965&lon=139.4472&z=10"><img alt="雨雲の動き" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/raincloud/1599021000/202010-0000-pf1300-20200902133000.gif?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>天気図</dt>
<dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="天気図" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/chart_v2/1599012878/WM_ChartA_20200902-090000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>気象衛星</dt>
<dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="気象衛星" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/satellite_v2/1599022735/WM_H-JPN-IR_20200902-140000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li>
</ul>
</div>]
이미지의 URL 만 얻고 싶습니다.
이미지 url의 전후에 「"」가 있으므로, 이것을 지정 문자로서 문자 단락짓는다.
구분 후의 리스트로부터 해당 url이 있는 리스트 번호를 지정한다.
sp = re.split('"', str(pict))
sp[7]
'https://s.yimg.jp/images/weather/general/next/size150/203_day.png'
URL에서 이미지를 꺼내 PIL로 표시
from PIL import Image
from io import BytesIO
img = requests.get(sp[7]).content
today_pict = Image.open(BytesIO(img))
today_pict
별해
a 태그에서 img 만 꺼내는 방법도 있습니다.
a_img = soup.select('a > img')
꺼내기에서 split하여 확장자 일치로 이미지로 좁히기
str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]
저장
today_pict.save("today_pict.png")
이상
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html'
html = requests.get(url).text
soup = BeautifulSoup(html, 'lxml')
today = soup.select('.yjMt')
div가 얻고 싶을 때는 select('div')
class가 취득하고 싶을 때는('.class')
id가 얻고 싶을 때는 ( '#id')
img가 취하고 싶을 때는 select보다soup.find_all('img') 쪽이 편리할지도
취득한 내용을 확인
today
[<h2 class="yjMt">今日明日の天気</h2>,
<h2 class="yjMt">週間天気</h2>,
<h2 class="yjMt">ピンポイント天気</h2>]
세 가지 요소가 잡혀 버리기 때문에, list의 번호를 지정해 꺼낼 필요가 있다.
같은 요령으로 최고 최저 기온 획득
high = soup.select('.high')
low = soup.select('.low')
low
[<li class="low"><em>25</em>℃[+2]</li>,
<li class="low"><em>28</em>℃[+3]</li>]
오늘 내일의 정보가 들어오고 있으므로 list의 번호를 지정.
불필요한 문자열을 제거합니다.
today_low= str(low[0]).replace('<li class="high"><em>', '').replace('</em>', '').replace('</li>', '')
이미지 얻기
웹사이트에서 이미지를 마우스 오른쪽 버튼으로 클릭
url을 복사하고 ctrl + F로 해당 url을 검색합니다.
class가 pict라고 알았다
pict = soup.select('.pict')
pict
[<p class="pict"><img alt="曇時々雨" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png"/>曇時々雨</p>,
<p class="pict"><img alt="曇のち晴" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png"/>曇のち晴</p>,
<div class="cmnMod pict">
<ul>
<li>
<dl>
<dt>雨雲レーダー</dt>
<dd><a data-ylk="slk:zmradar; pos:1" href="//weather.yahoo.co.jp/weather/zoomradar/?lat=35.6965&lon=139.4472&z=10"><img alt="雨雲の動き" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/raincloud/1599021000/202010-0000-pf1300-20200902133000.gif?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>天気図</dt>
<dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="天気図" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/chart_v2/1599012878/WM_ChartA_20200902-090000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>気象衛星</dt>
<dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="気象衛星" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/satellite_v2/1599022735/WM_H-JPN-IR_20200902-140000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li>
</ul>
</div>]
이미지의 URL 만 얻고 싶습니다.
이미지 url의 전후에 「"」가 있으므로, 이것을 지정 문자로서 문자 단락짓는다.
구분 후의 리스트로부터 해당 url이 있는 리스트 번호를 지정한다.
sp = re.split('"', str(pict))
sp[7]
'https://s.yimg.jp/images/weather/general/next/size150/203_day.png'
URL에서 이미지를 꺼내 PIL로 표시
from PIL import Image
from io import BytesIO
img = requests.get(sp[7]).content
today_pict = Image.open(BytesIO(img))
today_pict
별해
a 태그에서 img 만 꺼내는 방법도 있습니다.
a_img = soup.select('a > img')
꺼내기에서 split하여 확장자 일치로 이미지로 좁히기
str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]
저장
today_pict.save("today_pict.png")
이상
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
high = soup.select('.high')
low = soup.select('.low')
low
[<li class="low"><em>25</em>℃[+2]</li>,
<li class="low"><em>28</em>℃[+3]</li>]
today_low= str(low[0]).replace('<li class="high"><em>', '').replace('</em>', '').replace('</li>', '')
웹사이트에서 이미지를 마우스 오른쪽 버튼으로 클릭
url을 복사하고 ctrl + F로 해당 url을 검색합니다.
class가 pict라고 알았다
pict = soup.select('.pict')
pict
[<p class="pict"><img alt="曇時々雨" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png"/>曇時々雨</p>,
<p class="pict"><img alt="曇のち晴" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png"/>曇のち晴</p>,
<div class="cmnMod pict">
<ul>
<li>
<dl>
<dt>雨雲レーダー</dt>
<dd><a data-ylk="slk:zmradar; pos:1" href="//weather.yahoo.co.jp/weather/zoomradar/?lat=35.6965&lon=139.4472&z=10"><img alt="雨雲の動き" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/raincloud/1599021000/202010-0000-pf1300-20200902133000.gif?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>天気図</dt>
<dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="天気図" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/chart_v2/1599012878/WM_ChartA_20200902-090000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li><!--
--><li>
<dl>
<dt>気象衛星</dt>
<dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="気象衛星" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/satellite_v2/1599022735/WM_H-JPN-IR_20200902-140000.jpg?w=200&h=150" width="200"/>
</a></dd>
</dl>
</li>
</ul>
</div>]
이미지의 URL 만 얻고 싶습니다.
이미지 url의 전후에 「"」가 있으므로, 이것을 지정 문자로서 문자 단락짓는다.
구분 후의 리스트로부터 해당 url이 있는 리스트 번호를 지정한다.
sp = re.split('"', str(pict))
sp[7]
'https://s.yimg.jp/images/weather/general/next/size150/203_day.png'
URL에서 이미지를 꺼내 PIL로 표시
from PIL import Image
from io import BytesIO
img = requests.get(sp[7]).content
today_pict = Image.open(BytesIO(img))
today_pict
별해
a 태그에서 img 만 꺼내는 방법도 있습니다.
a_img = soup.select('a > img')
꺼내기에서 split하여 확장자 일치로 이미지로 좁히기
str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]
저장
today_pict.save("today_pict.png")
이상
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
a_img = soup.select('a > img')
str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]
today_pict.save("today_pict.png")
이상
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ringa_hyj/items/8a05f5841e75a3a1501b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)