Scraping dynamisch geladener TV-Programmlisten [Python] [Selen]

Überblick

Scraping von TV-Programminformationen aus Yahoo! TV.G Guide Ich habe den Code dafür geschrieben. Es gibt zwei Punkte, die ich mir ausgedacht habe.

Dieses Mal habe ich versucht, die Startzeit, den Kanal und den Programmtitel wie unten gezeigt als CSV auszugeben.

Startzeit,Kanal,Programmtitel
21:54,5,Pressestation
22:30,1,Historische geheime Geschichte Historia "Hirozen Castle 400 Jahre Nordschloss"
22:50,2,Nekomentary Katzen und Schöpflöffel. "Shuichi Yoshida und Kin-chan Gin-chan"
23:00,4,news zero Neuankömmlinge "milde" Männer, die zu Hause warten(52)Gestorben ... auf ein Bett warten
23:00,6,NEWS23 Ayaka Ogawa ▽ Deckt das berühmte Lied von Moe Shiraishi Telework ab
23:00,7,WBS ▽ Super ist sehr voll ... 3 Wie man es verhindert?Was ist eine Einkaufsagentur? ▽ Iris beschließt, die Maskenproduktion zu steigern
23:00,8,TOKIO Kakeru [Yosuke Eguchi&Kenichi Takifuji gesteht sein unerwartetes Paarleben!Meisterwerk Drama auch veröffentlicht]
...

Hinweis

Das Verschrotten kann je nach Verwendungszweck als illegal angesehen werden. Weitere Informationen finden Sie jedes Mal unter Nutzungsbedingungen und robots.txt. Bitte verwenden Sie den in diesem Artikel enthaltenen Code nach eigenem Ermessen und auf eigenes Risiko.

Umgebung

macOS Catalina Version 10.15.4 und Python3.8 Oder Raspberry Pi 3 Model B + und Rasbian Stretch und Python3.5

Vorbereitung

Gemeinsam für Mac und Raspeye

Installieren Sie schöne Suppe, Selen mit Pip

pip install beautifulsoup4
pip install selenium

Nur Mac

Wenn der Chrome-Browser nicht auf Ihrem PC installiert ist, installieren Sie ihn. https://www.google.com/intl/ja_jp/chrome/

Installieren Sie den Chromtreiber mit pip. Bitte installieren Sie die Version, die der Version des Chrome-Browsers entspricht.

pip install chromedriver-binary==<Chrome-Versionsnummer>

Referenz: [Für Selen] So installieren Sie den Chrome-Treiber mit pip (kein Durchgang erforderlich, Version kann angegeben werden) https://qiita.com/hanzawak/items/2ab4d2a333d6be6ac760

Nur Razz Pie

Installieren Sie den Chromtreiber. (Dieses Mal hat es unten funktioniert, aber ehrlich gesagt verstehe ich das nicht so gut. Es wird angenommen, dass es aufgrund einer anderen Version als der Browser möglicherweise nicht funktioniert, aber was soll ich in einem solchen Fall tun? Ist unbestätigt)

sudo apt-get install chromium-chromedriver

Referenz: Browser-Betrieb auf Raspberry Pi mit Selenium- und Chrome-Treiber https://www.miki-ie.com/raspberry-pi/raspberry-pi%E3%81%ABselenium%E3%81%A8chromedriver%E3%81%A7%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%93%8D%E4%BD%9C/

Code

Wir haben bestätigt, dass es ab dem 21. April 2020 funktioniert. Bitte beachten Sie jedoch, dass es möglicherweise nicht funktioniert, wenn sich die Struktur der Seite in Zukunft ändert. Unten werden der Programmtitel, die Startzeit und die Kanalinformationen erfasst. Schreiben Sie insbesondere den Teil, der Informationen von HTML erhält, entsprechend dem Zweck neu.

from bs4 import BeautifulSoup
from selenium import webdriver   
import platform
#Verzweigen Sie den Prozess je nach Betriebssystem, sodass auf Mac und Raspeye derselbe Code funktioniert
OS = platform.system()
if OS == 'Darwin': #Für Mac
    import chromedriver_binary
elif OS == 'Linux': #Für Himbeerkuchen
    pass

output_file_path = 'program.csv'

area = '23' #Welche Programmanleitung der Präfektur soll angezeigt werden? 23 ist Tokio.
date = '20200421' #Welches Jahr, Monat und Tag, um den Zeitplan anzuzeigen.
starttime = '20' #Wann wird der Programmführer angezeigt?
duration_hour = '6' #Wie viele Stunden Programmlisten sollen angezeigt werden?

url = 'https://tv.yahoo.co.jp/listings/?'
#Regionale Informationen hinzugefügt. Kann weggelassen werden (auskommentieren). Der Standardwert ist 23(Tokio)
url += ('a='+area+'&')
#Datumsinformationen hinzugefügt. Kann weggelassen werden (auskommentieren). Der Standardwert ist das aktuelle Datum
url += ('d='+date+'&')
#Zeitinformationen hinzugefügt. Kann weggelassen werden (auskommentieren). Der Standardwert, wenn er weggelassen wird, ist die aktuelle Zeit
url += ('st='+starttime+'&')
#Informationen zur Anzeige der Zielzeit hinzugefügt. Kann weggelassen werden (auskommentieren). Der Standardwert, wenn weggelassen, ist 6 (Einheit ist Zeit)
url += ('va='+duration_hour+'&')

#Holen Sie sich Webdriver. Wenn Sie hier einen Fehler bekommen, chromedriver-Bezweifle den Versionsunterschied von binär
options = webdriver.ChromeOptions() 
options.add_argument('--headless') 
driver = webdriver.Chrome(options=options)

#Laden Sie die Webseite, holen Sie sich das HTML und analysieren Sie es mit beautifulSoup
driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html,'html.parser')

#Erfassung von Programmleitfadeninformationen

#Holen Sie sich die Kanalliste oben in den Programmführer
station_elems = soup.find_all('td', class_='station')
stations = [elem.text.split('ch')[0] for elem in station_elems]
#Erwerb von Elementen einschließlich Programmtitel
title_elems = soup.find_all('a', class_='title')

table = [['Startzeit','Kanal','Programmtitel']]
for elem in title_elems:
    #Titel holen
    title = elem.text
    #Startzeit bekommen
    starttime = elem.parent.find('span',class_='time').text
    #Welche Spalte im Programmführer enthält die Informationen?
    col = int(elem.get('data-ylk').split('pos:')[1])
    #Kanalnummer aus Spaltennummer abrufen
    channel = stations[col-1]
    #Fügen Sie den Elementen Programmtitel, Kanal und Startzeit hinzu
    table.append([starttime,channel,title])
    
#Speichern Sie im CSV-Format
with open(output_file_path,'w') as f:
    f.write('\n'.join([','.join(v) for v in table])) 

Referenz

Wie man die Terminal-Scraping-TV-Listen ausgibt http://moxtsuan.hatenablog.com/entry/scrape-tvprogram

Recommended Posts

Scraping dynamisch geladener TV-Programmlisten [Python] [Selen]
Schaben mit Selen [Python]
Schaben mit Selen in Python
Schaben mit Selen + Python Teil 1
Scraping mit Selen in Python
Web Scraping mit Selenium (Python)
Schaben mit Selen + Python Teil 2
[Python + Selen] Tipps zum Scraping
[Python] Einführung in das Scraping | Programm zum Öffnen von Webseiten (Selenium-Webdriver)
Scraping mit Selen in Python (Basic)
Scraping mit Python, Selen und Chromedriver
[Scraping] Python-Scraping
Üben des Web-Scrapings mit Python und Selen
Selen + WebDriver (Chrome) + Python | Erstellen einer Umgebung zum Scraping
Ich habe versucht, Web-Scraping mit Python und Selen
[Python] Einkaufsprogramm
Python-Scraping-Memo
Schaben mit Selen
[Python / Selen] XPath
Python Scraping get_ranker_categories
Schaben mit Selen ~ 2 ~
Scraping mit Python
Scraping mit Python
Python Scraping eBay
Schaben mit Selen
Python Scraping get_title
Python: Scraping Teil 1
Scraping mit Python
Python: Scraping Teil 2
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen