Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python

Préparation

import re
import requests
from pathlib import Path
import requests
from bs4 import BeautifulSoup

Créer un dossier de travail

output_folder = Path('Dossier de travail')
output_folder.mkdir(exist_ok=True)

Je veux obtenir des données météo Yahoo

Obtenez l'élément html à l'aide de requêtes.

url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html'
html = requests.get(url).text

C'est difficile à lire tel quel, alors réécrivez la structure avec Beautiful Soup

soup = BeautifulSoup(html, 'lxml')

Vérifiez la soupe pour voir où se trouvent les informations que vous souhaitez obtenir. Cette fois, je veux obtenir ** la météo d'aujourd'hui demain **.

Recherchez le mot avec ctrl + F.

image.png

J'ai pu confirmer class = "yjMt".

Obtenir en spécifiant l'élément avec soupe

today = soup.select('.yjMt')

Lorsque vous souhaitez obtenir un div, sélectionnez ('div') Quand la classe veut obtenir ('.class') Lorsque vous voulez obtenir l'identifiant ('# id') Si vous voulez prendre img, soup.find_all ('img') peut être plus pratique que de sélectionner

Vérifiez le contenu acquis

today
[<h2 class="yjMt">Aujourd'hui la météo de demain</h2>,
 <h2 class="yjMt">Météo hebdomadaire</h2>,
 <h2 class="yjMt">Météo précise</h2>]

Puisque trois éléments sont supprimés, il est nécessaire de spécifier le numéro de la liste et de l'extraire.

Obtenez la température maximale et minimale de la même manière

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>]

Puisque l'information de demain arrive aujourd'hui, spécifiez le numéro de la liste. Supprimez les chaînes inutiles.

today_low= str(low[0]).replace('<li class="high"><em>', '').replace('</em>', '').replace('</li>', '')

Obtenir une image

Faites un clic droit sur l'image sur le site Copiez l'url et recherchez l'url correspondante avec ctrl + F.

Il s'avère que la classe est pict

pict = soup.select('.pict')
pict
[<p class="pict"><img alt="Nuageux parfois pluie" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png "/>Nuageux parfois pluie</p>,
 <p class="pict"><img alt="Nuageux puis ensoleillé" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png "/>Nuageux puis ensoleillé</p>,
 <div class="cmnMod pict">
 <ul>
 <li>
 <dl>
 <dt>Radar de nuages de pluie</dt>
 <dd><a data-ylk="slk:zmradar; pos:1" href="//weather.yahoo.co.jp/weather/zoomradar/?lat=35.6965&amp;lon=139.4472&amp;z=10"><img alt="Mouvement des nuages de pluie" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/raincloud/1599021000/202010-0000-pf1300-20200902133000.gif?w=200&amp;h=150" width="200"/>
 </a></dd>
 </dl>
 </li><!--
 --><li>
 <dl>
 <dt>Carte météorologique</dt>
 <dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="Carte météorologique" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/chart_v2/1599012878/WM_ChartA_20200902-090000.jpg?w=200&amp;h=150" width="200"/>
 </a></dd>
 </dl>
 </li><!--
 --><li>
 <dl>
 <dt>Satellite météorologique</dt>
 <dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="Satellite météorologique" height="150" src="https://weather-pctr.c.yimg.jp/r/iwiz-weather/satellite_v2/1599022735/WM_H-JPN-IR_20200902-140000.jpg?w=200&amp;h=150" width="200"/>
 </a></dd>
 </dl>
 </li>
 </ul>
 </div>]

Je veux obtenir uniquement l'url de l'image. Puisqu'il y a un "" "avant et après l'URL de l'image, utilisez-le comme caractère spécifié pour séparer les caractères. Spécifiez le numéro de la liste avec l'URL correspondante dans la liste séparée.

sp = re.split('"', str(pict))
sp[7]
'https://s.yimg.jp/images/weather/general/next/size150/203_day.png'

Extraire l'image de l'URL et l'afficher dans PIL

from PIL import Image
from io import BytesIO

img = requests.get(sp[7]).content
today_pict = Image.open(BytesIO(img))
today_pict

image.png

Une autre solution

Il existe également un moyen de récupérer uniquement l'img dans la balise a

a_img = soup.select('a > img')

Séparer de l'extraction et réduire uniquement l'image en faisant correspondre l'extension

str_img = str(a_img).split('"')
l_in = [s for s in str_img if '.jpg' in s]

sauvegarder

today_pict.save("today_pict.png ")

c'est tout

Recommended Posts

Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
Web scraping avec python + JupyterLab
Web scraping débutant avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python et belle soupe
Faisons du scraping d'images avec Python
Premiers pas avec Python Web Scraping Practice
Explorer et gratter n'importe quel site avec mitmproxy
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
Premiers pas avec Python Web Scraping Practice
[Pour les débutants] Essayez le web scraping avec Python
Grattage avec Python
Grattage avec Python
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Grattage de la nourriture avec python et sortie en CSV
J'ai essayé le web scraping en utilisant python et sélénium
Lancer un serveur Web avec Python et Flask
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
[Développement Web avec Python] Précautions lors de l'enregistrement des cookies
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Grattage en Python (préparation)
Essayez de gratter avec Python.
Grattage avec Python + PhantomJS
Traitement d'image avec Python
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Scraping RSS avec Python
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Remarques sur le traitement d'images HDR et RAW avec Python
Analyser et visualiser JSON (application Web ⑤ avec Python + Flask)
Scrapage Web rapide avec Python (tout en prenant en charge le chargement JavaScript)
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Les débutants en Python sont bloqués dans leur premier scraping Web
Programmation avec Python et Tkinter
J'ai essayé de gratter avec Python
Python et matériel - Utilisation de RS232C avec Python -
Grattage avec Selenium + Python Partie 1
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
Édition d'image avec python OpenCV
Enregistrez des images avec le web scraping
Grattage avec du sélénium en Python
Tri des fichiers image avec Python (3)
Technologie de grattage WEB et préoccupations
Obtenez la page Web Python, encodez et affichez les caractères
[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
Compromis dans le scraping et l'exploration Web
Grattage Web facile avec Scrapy
Grattage avec Tor en Python
API Web avec Python + Falcon