Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python

Vorbereitung

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

Erstellen Sie einen Arbeitsordner

output_folder = Path('Arbeitsordner')
output_folder.mkdir(exist_ok=True)

Ich möchte Yahoo Wetterdaten erhalten

Holen Sie sich das HTML-Element mithilfe von Anforderungen.

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

Es ist schwer zu lesen, wie es ist, also schreiben Sie die Struktur mit Beautiful Soup neu

soup = BeautifulSoup(html, 'lxml')

Überprüfen Sie die Suppe, um festzustellen, wo sich die gewünschten Informationen befinden. Dieses Mal möchte ich das Wetter von morgen morgen bekommen.

Suchen Sie das Wort mit Strg + F.

image.png

Ich konnte class = "yjMt" bestätigen.

Geben Sie das Element mit Suppe an

today = soup.select('.yjMt')

Wenn Sie ein Div erhalten möchten, wählen Sie ('div') Wenn die Klasse bekommen will ('.class') Wenn Sie die ID erhalten möchten ('# id') Wenn Sie img einnehmen möchten, istoup.find_all ('img') möglicherweise bequemer als select

Überprüfen Sie den erfassten Inhalt

today
[<h2 class="yjMt">Heute morgen Wetter</h2>,
 <h2 class="yjMt">Wöchentliches Wetter</h2>,
 <h2 class="yjMt">Genaues Wetter</h2>]

Da drei Elemente entfernt werden, muss die Listennummer angegeben und extrahiert werden.

Ermitteln Sie die maximale und minimale Temperatur auf die gleiche Weise

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

Da die Informationen von morgen heute eingehen, geben Sie die Listennummer an. Entfernen Sie unnötige Zeichenfolgen.

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

Holen Sie sich ein Bild

Klicken Sie mit der rechten Maustaste auf das Bild auf der Website Kopieren Sie die URL und suchen Sie mit Strg + F nach der entsprechenden URL.

Es stellt sich heraus, dass die Klasse Bild ist

pict = soup.select('.pict')
pict
[<p class="pict"><img alt="Bewölkt manchmal Regen" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/203_day.png "/>Bewölkt manchmal Regen</p>,
 <p class="pict"><img alt="Bewölkt dann sonnig" border="0" src="https://s.yimg.jp/images/weather/general/next/size150/266_day.png "/>Bewölkt dann sonnig</p>,
 <div class="cmnMod pict">
 <ul>
 <li>
 <dl>
 <dt>Regenwolkenradar</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="Bewegung der Regenwolken" 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>Wetterkarte</dt>
 <dd><a data-ylk="slk:chart; pos:1" href="/weather/chart/"><img alt="Wetterkarte" 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>Meteorologischer Satellit</dt>
 <dd><a data-ylk="slk:stlt; pos:1" href="/weather/satellite/"><img alt="Meteorologischer Satellit" 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>]

Ich möchte nur die URL des Bildes erhalten. Da vor und nach der Bild-URL ein "" "steht, verwenden Sie dieses als angegebenes Zeichen, um die Zeichen zu trennen. Geben Sie die Listennummer mit der entsprechenden URL aus der getrennten Liste an.

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

Extrahieren Sie das Bild aus der URL und zeigen Sie es in PIL an

from PIL import Image
from io import BytesIO

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

image.png

Eine andere Lösung

Es gibt auch eine Möglichkeit, nur das Bild im a-Tag abzurufen

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

Von der Extraktion aufteilen und durch Anpassen der Erweiterung auf nur das Bild eingrenzen

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

sparen

today_pict.save("today_pict.png ")

das ist alles

Recommended Posts

Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
Web Scraping mit Python + JupyterLab
Web Scraping Anfänger mit Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Kratzen mit Python und schöner Suppe
Lassen Sie uns mit Python Image Scraping durchführen
Erste Schritte mit Python Web Scraping Practice
Crawlen und Scraping einer Site mit Mitmproxy
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Scraping mit Python
Scraping mit Python
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
Ich habe versucht, Web-Scraping mit Python und Selen
Starten Sie einen Webserver mit Python und Flask
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
[Webentwicklung mit Python] Vorsichtsmaßnahmen beim Speichern von Cookies
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Bildverarbeitung mit Python
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Scraping von RSS mit Python
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Programmieren mit Python und Tkinter
Ich habe versucht, mit Python zu kratzen
Python und Hardware-Verwenden von RS232C mit Python-
Schaben mit Selen + Python Teil 1
Schaben mit Chromedriver in Python
Festliches Scraping mit Python, Scrapy
Bildbearbeitung mit Python OpenCV
Speichern Sie Bilder mit Web Scraping
Scraping mit Selen in Python
Sortieren von Bilddateien mit Python (3)
WEB-Scraping-Technologie und Bedenken
Holen Sie sich Python-Webseite, Zeichenkodierung und Anzeige
[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!
Kompromisse beim Web Scraping & Crawlen
Einfaches Web-Scraping mit Scrapy
Scraping mit Tor in Python
Web-API mit Python + Falcon