Récupération des informations sur les programmes télévisés à partir du Guide Yahoo! TV.G J'ai écrit le code à faire. Il y a deux points que j'ai imaginés.
requêtes
de Python.
J'ai donc résolu ce problème en utilisant «sélénium».Cette fois, j'ai essayé de sortir l'heure de début, la chaîne et le titre du programme au format csv, comme indiqué ci-dessous.
Heure de début,Canal,Titre du programme
21:54,5,Station de presse
22:30,1,Histoire secrète historique Historia "Château Hirozen 400 ans du château nord"
22:50,2,Chats nekomentaires et louche. «Shuichi Yoshida et Kin-chan Gin-chan»
23:00,4,news zero Nouveaux hommes "doux" en attente à la maison(52)Décédé ... en attendant un lit
23:00,6,NEWS23 Ayaka Ogawa ▽ Couvre la célèbre chanson de Moe Shiraishi Telework
23:00,7,WBS ▽ Super est très encombré ... 3 Comment l'éviter?Qu'est-ce que l'agence d'achat? ▽ Iris décide d'augmenter la production de masques
23:00,8,TOKIO Kakeru [Yosuke Eguchi&Kenichi Takifuji avoue sa vie de couple inattendue!Le drame Masterpiece est également sorti]
...
Le grattage peut être considéré comme illégal selon la manière dont il est utilisé. Veuillez également consulter les Conditions d'utilisation et robots.txt à chaque fois. Veuillez utiliser le code inclus dans cet article à votre propre discrétion et à vos propres risques.
macOS Catalina version 10.15.4 et python3.8 Ou Raspberry Pi 3 modèle B + et Rasbian Stretch et python3.5
Installez beautifulsoup, sélénium avec pip
pip install beautifulsoup4
pip install selenium
Si le navigateur Chrome n'est pas installé sur votre PC, installez-le. https://www.google.com/intl/ja_jp/chrome/
Installez le pilote chrome avec pip. Veuillez installer celui qui correspond à la version du navigateur Chrome.
pip install chromedriver-binary==<Numéro de version de Chrome>
Référence: [Pour le sélénium] Comment installer le pilote Chrome avec pip (pas besoin de passer, la version peut être spécifiée) https://qiita.com/hanzawak/items/2ab4d2a333d6be6ac760
Installez le pilote chrome. (Cette fois, cela a fonctionné ci-dessous, mais honnêtement, je ne comprends pas très bien. On suppose que cela peut ne pas fonctionner en raison d'une version différente du navigateur, mais que dois-je faire dans un tel cas? N'est pas confirmé)
sudo apt-get install chromium-chromedriver
Référence: Fonctionnement du navigateur sur Raspberry Pi avec pilote Selenium et chrome 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/
Nous avons confirmé que cela fonctionne à partir du 21 avril 2020, mais veuillez noter que cela pourrait ne pas fonctionner si la structure de la page change à l'avenir. Ci-dessous, le titre du programme, l'heure de début et les informations sur la chaîne sont acquis. Plus précisément, réécrivez la partie qui acquiert des informations à partir de html en fonction de l'objectif.
from bs4 import BeautifulSoup
from selenium import webdriver
import platform
#Branche le processus en fonction du système d'exploitation afin que le même code fonctionne à la fois sur Mac et Raspeye
OS = platform.system()
if OS == 'Darwin': #Pour Mac
import chromedriver_binary
elif OS == 'Linux': #Pour la tarte aux framboises
pass
output_file_path = 'program.csv'
area = '23' #Le guide des programmes de la préfecture à afficher. 23 est Tokyo.
date = '20200421' #Quelle année, mois et jour pour afficher le calendrier.
starttime = '20' #À quelle heure le guide des programmes sera-t-il affiché?
duration_hour = '6' #Combien d'heures de listes de programmes doivent être affichées.
url = 'https://tv.yahoo.co.jp/listings/?'
#Ajout d'informations régionales. Peut être omis (commenter). La valeur par défaut est 23(Tokyo)
url += ('a='+area+'&')
#Ajout d'informations sur la date. Peut être omis (commenter). La valeur par défaut est la date actuelle
url += ('d='+date+'&')
#Ajout d'informations sur l'heure. Peut être omis (commenter). La valeur par défaut lorsqu'elle est omise est l'heure actuelle
url += ('st='+starttime+'&')
#Ajout d'informations sur l'heure cible d'affichage. Peut être omis (commenter). La valeur par défaut lorsqu'elle est omise est 6 (l'unité est le temps)
url += ('va='+duration_hour+'&')
#Obtenez webdriver. Si vous obtenez une erreur ici, chromedriver-Doute la différence de version de binaire
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
#Chargez la page Web, récupérez le html et analysez-le avec beautifulSoup
driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html,'html.parser')
#Acquisition des informations du guide des programmes
#Obtenez la liste des chaînes écrite en haut du guide des programmes
station_elems = soup.find_all('td', class_='station')
stations = [elem.text.split('ch')[0] for elem in station_elems]
#Acquisition d'éléments dont le titre du programme
title_elems = soup.find_all('a', class_='title')
table = [['Heure de début','Canal','Titre du programme']]
for elem in title_elems:
#Obtenir le titre
title = elem.text
#Obtenir l'heure de début
starttime = elem.parent.find('span',class_='time').text
#Quelle colonne du guide des programmes contient les informations
col = int(elem.get('data-ylk').split('pos:')[1])
#Obtenir le numéro de canal à partir du numéro de colonne
channel = stations[col-1]
#Ajouter le titre du programme, la chaîne, l'heure de début aux éléments
table.append([starttime,channel,title])
#Enregistrer au format csv
with open(output_file_path,'w') as f:
f.write('\n'.join([','.join(v) for v in table]))
Comment dépenser les listes de télévision du terminal-scraping http://moxtsuan.hatenablog.com/entry/scrape-tvprogram
Recommended Posts