[Python] J'ai créé un code de scraping web qui acquiert automatiquement le titre de l'actualité et l'URL de Nihon Keizai Shimbun.

Raison de la publication

・ J'ai récemment étudié le scraping Web et j'aimerais aider les gens qui étudient également. ・ Pour la sortie de mon propre apprentissage. Pratique de sortie. ・ C'est une production humaine qui est moins d'un mois après que j'ai commencé à toucher le Web scraping ou Selenium. Au contraire, désormais S'il vous plaît, utilisez-le comme guide, car les personnes qui le lancent peuvent généralement le devenir. ・ Je ne comprends pas autant que possible l'explication super détaillée. Je ne peux le comprendre qu'en gros, j'espère donc que ceux qui le liront le comprendront. ・ Nous nous référons à robots.txt et jugeons qu'il ne semble y avoir aucun problème, et nous l'implémentons.

Code créé

newspaper.py


import requests
from bs4 import BeautifulSoup
import pandas as pd

#Création de la liste requise pour le web scraping
elements_title = []
elements_url = []

#Processus de scraping Web
def get_nikkei_news():
    url = "https://www.nikkei.com/"
    response = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html,"html.parser")

    #Traitement du titre
    title_list = soup.select(".k-card__block-link")
    for title in title_list:
        elements_title.append(title.text)

    #Traitement à propos de l'URL
    url_list = soup.select(".k-card__block-link")
    for i in url_list:
        urls = i.get("href")
        if "http" not in urls:
            urls = "https://www.nikkei.com" + urls
            elements_url.append(urls)
        else:
            elements_url.append(urls)

#Appel de processus de scraping Web
get_nikkei_news()

#traitement des pandas
df = pd.DataFrame({"news_title":elements_title,
                   "news_url":elements_url})
print(df)
df.to_csv("nikkei_test_select.csv", index=False, encoding="utf-8")

Résultat de sortie (console uniquement)

              news_title                                           news_url
0 Taux de croissance de l'exercice 2008, moins 4%Perspectives du gouvernement du centre de Taiwan https://www.nikkei.com/article/DGXMZO62026930Z...
1 États-Unis-Australie 2 Plus 2, «Graves préoccupations» sur la route puissante de la Chine https://www.nikkei.com/article/DGXMZO62026150Z...
2 dangereuses «politiques Xi Jinping» toutes négatives, de l'Union soviétique, qui invite à la collision dans le sort américain https://www.nikkei.com/article/DGXMZO61984420Y...
3 L'usine de retraitement du combustible nucléaire a réussi l'examen de sûreté; l'opération a commencé au cours de l'exercice 2009://www.nikkei.com/article/DGXMZO62026760Z...
4 Études suspendues à l'étranger à Corona, soudainement entré à la recherche d'un emploi, essais pour les étudiants de retour https://www.nikkei.com/article/DGXMZO61953440X...
..                         ...                                                ...
70 Petite fusée, petite et moyenne, etc. visant à se lancer dans les airs https://www.nikkei.com/article/DGXMZO61958380X...
71 Marunaka recrute préférentiellement des stagiaires techniques dans son pays d'origine, Aeon https://www.nikkei.com/article/DGXMZO62005790Y...
72 Renforcement des mesures aux frontières, visant à reprendre les vols internationaux Président du bâtiment de l'aéroport de Naha https://www.nikkei.com/article/DGXMZO62017470Y...
73 Le président de la Kanagawa Bank, Kondo, réforme pour la première fois le filtrage des prêts https://www.nikkei.com/article/DGXMZO61933170X...
74 Toriten: Profitez du goût de l'hospitalité d'Oita et mangez en marchant https://www.nikkei.com/article/DGXMZO56989060Z...

Explication générale

・ Nihon Keizai Shimbun (https://www.nikkei.com/) Les titres et URL de toutes les actualités et publicités affichées sur la première page de C'est un code de scraping Web qui effectue un traitement pour cracher au format csv. Je pense que c'est un code de base (éventuellement) pour le scraping Web en utilisant BeautifulSoup et les requêtes.

・ Préparez une liste vide pour stocker le titre et l'url de l'actualité, Le traitement d'extraction des données à inclure dans la liste est effectué dans chaque fonction. Pour extraire le titre de l'actualité, j'aurais dû aller le récupérer, mais l'URL peut avoir "https: //" (partie protocole) depuis le début. Certains d'entre eux n'étaient pas attachés, nous avons donc créé une branche conditionnelle, et pour ceux qui n'étaient pas attachés, "https://www.nikkei.com" Est ajouté. (Peut-être qu'une partie étrange de l'URL sera sortie. Il ne semble pas que je l'ai vérifiée visuellement, mais si c'était le cas, elle serait corrigée (-_-;))

-Il est sorti par print () et une autre sortie au format csv. Cependant, comme il est émis avec utf-8, les caractères sont déformés lorsqu'ils sont ouverts sur un PC Windows. J'utilise atom, google drive, Cloud9, etc. Nous vérifions le contenu, donc si vous souhaitez vérifier la sortie en copiant ce code, veuillez vous y référer <m (__) m>

Explication du code (en gros)

La partie suivante de la fonction qui exécute le processus de grattage Web est codée avec diligence, ce qui, à mon avis, est magique. Copiez et collez l'URL cible que vous souhaitez extraire sur le Web dans l'URL, puis importez le fichier HTML à partir de cette URL. Je pense que c'est comme analyser la structure avec une perspective HTML.

parts.py


    url = "https://www.nikkei.com/"
    response = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html,"html.parser")

Le code ci-dessous récupère le titre. Ensuite, le titre extrait est stocké dans la liste.

parts.py


    title_list = soup.select(".k-card__block-link")
    for title in title_list:
        elements_title.append(title.text)

Le code suivant récupère l'url. Cependant, le contenu peut être insuffisant simplement en le retirant. Comme il y en avait, le branchement conditionnel est effectué avec l'instruction if, et s'il y a une pénurie, compensez la pénurie. Il sera stocké dans la liste.

parts.py


    url_list = soup.select(".k-card__block-link")
    for i in url_list:
        urls = i.get("href")
        if "http" not in urls:
            urls = "https://www.nikkei.com" + urls
            elements_url.append(urls)
        else:
            elements_url.append(urls)

Ce qui suit utilise un module appelé pandas pour le convertir au format csv et le cracher. Dans les pandas, faites-en un type de dictionnaire, définissez le nom de la colonne dans la clé et définissez l'élément de chaque colonne dans la valeur. J'ai pu sortir les données au format csv proprement. C'est pratique. pandas.

parts.py


df = pd.DataFrame({"news_title":elements_title,
                   "news_url":elements_url})
print(df)
df.to_csv("nikkei_test.csv", index=False, encoding="utf-8")

Recommended Posts

[Python] J'ai créé un code de scraping web qui acquiert automatiquement le titre de l'actualité et l'URL de Nihon Keizai Shimbun.
[Python scraping] Affiche l'URL et le titre du site contenant un mot-clé spécifique dans un fichier texte
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
[Python / C] J'ai créé un appareil qui fait défiler sans fil l'écran d'un PC à distance.
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber (édition Google Calendar)
J'ai fait un bot mou qui m'informe de la température
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
Obtenez le titre et la date de livraison de Yahoo! News en Python
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
[Python] J'ai analysé le journal d'un homme au cours de sa première année de vie professionnelle et j'ai fait un jugement positif / négatif sur la vie professionnelle.
J'ai créé une application Web en Python qui convertit Markdown en HTML
[Python] J'ai écrit un code simple qui génère automatiquement AA (Ascii Art)
L'histoire du développement d'une application WEB qui génère automatiquement des copies de capture [MeCab]
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait en sorte que l'IA patrouille sur le net et créé un service Web de classement des gadgets mis à jour une fois par semaine
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
J'ai comparé la vitesse de l'écho du framework web en langage go et du flask du framework web python
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai essayé le web scraping en utilisant python et sélénium
Prise en compte des forces et faiblesses de Python
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
Obtenez le titre de Yahoo News et analysez les sentiments
[Python] Un programme qui compte le nombre de vallées
Créez un BOT qui raccourcit l'URL Discord
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé une VM qui exécute OpenCV pour Python
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
J'ai vérifié les versions de Blender et Python
J'ai essayé de faire LINE BOT avec Python et Heroku
Un mémo que j'ai touché au magasin de données avec python
J'ai senti que j'avais porté le code Python en C ++ 98.
[Python] Un programme qui compare les positions des kangourous.
J'ai créé une application Twitter qui identifie et enregistre l'image d'un personnage spécifique sur la chronologie de Twitter par pytorch transfer learning
Lors de l'écriture dans un fichier csv avec python, une histoire que j'ai fait une légère erreur et n'a pas respecté la date de livraison
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
Recueillez des tweets sur "Corona" avec python et détectez automatiquement les mots qui sont devenus un sujet brûlant en raison de l'influence de "Corona"
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
J'ai essayé "Streamlit" qui transforme le code Python en une application web tel quel
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
Un outil qui transforme automatiquement le gacha de Soshage
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation