파이썬으로 웹 크롤링, 웹 스크래핑, 문자 획득 및 이미지 저장
아래 준비
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.)