Grattage des listes de programmes télévisés chargées dynamiquement [Python] [Selenium]

Aperçu

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.

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

Mise en garde

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.

environnement

macOS Catalina version 10.15.4 et python3.8 Ou Raspberry Pi 3 modèle B + et Rasbian Stretch et python3.5

Préparation

Commun à Mac et Raspeye

Installez beautifulsoup, sélénium avec pip

pip install beautifulsoup4
pip install selenium

Mac uniquement

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

Tarte Razz uniquement

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/

code

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

référence

Comment dépenser les listes de télévision du terminal-scraping http://moxtsuan.hatenablog.com/entry/scrape-tvprogram

Recommended Posts

Grattage des listes de programmes télévisés chargées dynamiquement [Python] [Selenium]
Grattage avec du sélénium [Python]
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Grattage avec du sélénium en Python
Web scraping avec Selenium (Python)
Grattage avec Selenium + Python Partie 2
[Python + Selenium] Conseils pour le grattage
[Python] Introduction au scraping | Programme d'ouverture de pages Web (sélénium webdriver)
Scraping avec Selenium en Python (Basic)
Grattage avec Python, Selenium et Chromedriver
[Scraping] Scraping Python
Pratiquer le web scraping avec Python et Selenium
Selenium + WebDriver (Chrome) + Python | Création d'un environnement pour le scraping
J'ai essayé le web scraping en utilisant python et sélénium
[Python] Programme d'achat
Mémo de raclage Python
Grattage au sélénium
[Python / Selenium] XPath
Scraping Python get_ranker_categories
Grattage au sélénium ~ 2 ~
Grattage avec Python
Grattage avec Python
Python racle eBay
Grattage avec du sélénium
Grattage Python get_title
Python: grattage partie 1
Scraping à l'aide de Python
Python: grattage, partie 2
J'étais accro au grattage avec Selenium (+ Python) en 2020