[PYTHON] J'ai essayé de sauvegarder les données récupérées au format CSV!

introduction

J'ai récemment appris le scraping et je l'ai implémenté. Cette fois, j'ai créé un mot-clé dans " Articles CiNii - Recherche d'articles japonais - Institut national d'informatique ". Tous les «titres», «auteurs» et «supports de publication papier» des articles ayant atteint le mot-clé sont acquis et enregistrés au format CSV. C'était une bonne étude pour apprendre le grattage, alors j'ai écrit un article. Nous espérons que cela aidera ceux qui apprennent le grattage!

code

Voici le code que j'ai écrit moi-même. L'explication est écrite avec le code, alors jetez-y un œil. En outre, rendez-vous sur le site de " Articles CiNii - Recherche d'articles japonais - Institut national d'informatique " et Chrome Je pense que cette compréhension s'approfondira si vous le faites tout en examinant la structure du HTML en utilisant la fonction de vérification de. Cette fois, j'ai enregistré ce code sous le nom "search.py".

import sys
import os
import requests
import pandas as pd
from bs4 import BeautifulSoup
import re


def main():
    url ='https://ci.nii.ac.jp/search?q={}&count=200'.format(sys.argv[1])
    res = requests.get(url)
    soup = BeautifulSoup(res.content , "html.parser")

    #Vérifiez le nombre de recherches.
    #Dans le texte'\n Résultats de la recherche\n\t\n\cas t0\n\t'Il contient des données comme celles-ci.
    search_count_result = soup.find_all("h1" , {"class":"heading"})[0].text
    #Obtenez le nombre de recherches à l'aide d'expressions régulières
    pattern = '[0-9]+'
    result = re.search(pattern, search_count_result)
   
   #S'il n'y a pas de résultat de recherche, la fonction se termine ici
    search_count = int(result.group())
    if  search_count == 0:
        return print('Il n'y a pas de résultats de recherche.')

    print('Le nombre de recherches est' + str(search_count) + 'C'est une question.')

    #Création d'un répertoire pour stocker des données.
    try:
        os.makedirs(sys.argv[1])
        print("Un nouveau répertoire a été créé.")
    except FileExistsError:
        print("Ce sera un répertoire qui existe déjà.")

    #Pour obtenir tous les résultats de la recherche, obtenez le nombre de pour.
    #Cette fois, il est mis à 200 car il est affiché tous les 200 cas.
    if search_count // 200 == 0:
        times = 1
    elif search_count % 200 == 0:
        times = search_count // 200
    else:
        times = search_count // 200 + 1

    
    #Acquérir des auteurs, des titres et des supports de publication à la fois
    title_list = []
    author_list = []
    media_list = []

    #Traitement pour supprimer les caractères vides ici
    escape = str.maketrans({"\n":'',"\t":''})
    for time in range(times):
        
        #Obtenir l'URL
        count = 1 + 200 * time
        #search?q={}Saisissez ici le mot-clé que vous souhaitez rechercher.
        #count=200&start={}Il compte tous les 200 et entre le nombre à afficher.
        url ='https://ci.nii.ac.jp/search?q={}&count=200&start={}'.format(sys.argv[1], count)
        print(url)
        res = requests.get(url)
        soup = BeautifulSoup(res.content , "html.parser")


        for paper in soup.find_all("dl", {"class":"paper_class"}):#Tournez la boucle pour chaque papier.
            
            #Obtenir le titre
            title_list.append(paper.a.text.translate(escape))
            #Acquisition de l'auteur
            author_list.append(paper.find('p' , {'class':"item_subData item_authordata"}).text.translate(escape))
            #Acquisition de supports de publication
            media_list.append(paper.find('p' , {'class':"item_extraData item_journaldata"}).text.translate(escape))
    
    #Enregistrer au format CSV en tant que bloc de données.
    jurnal = pd.DataFrame({"Title":title_list , "Author":author_list , "Media":media_list})
    
    #Le codage est effectué pour éviter les caractères déformés.
    jurnal.to_csv(str(sys.argv[1] + '/' + str(sys.argv[1]) + '.csv'),encoding='utf_8_sig')
    print('J'ai créé un fichier.')
    print(jurnal.head())


if __name__ == '__main__':
    #Le code que vous souhaitez exécuter uniquement lorsque vous exécutez le module directement
    main()

J'ai essayé de le mettre en œuvre.

J'ai essayé de mettre en œuvre ce que j'ai réellement créé. Tout d'abord, saisissez ce qui suit dans le terminal. Cette fois, j'ai saisi l'apprentissage automatique comme mot-clé de recherche. À la place de l'apprentissage automatique, vous pouvez saisir le mot-clé que vous souhaitez rechercher.

python search.apprentissage automatique py

Si tout se passe bien, cela ressemblera à ceci: 2020-10-27 (3).png

Le contenu du CSV ressemble à ceci. 2020-10-27 (4).png

finalement

Comment était-ce? J'ai appris le grattage il y a environ trois jours, mais le code était sale, mais c'était relativement facile à mettre en œuvre. Je pense que j'ai encore plus de temps pour étudier, alors je continuerai à faire de mon mieux.

Recommended Posts

J'ai essayé de sauvegarder les données récupérées au format CSV!
Je me suis perdu dans le labyrinthe
J'ai participé au tour de qualification ISUCON10!
Vérifiez le résumé des données dans CASTable
J'ai écrit la file d'attente en Python
J'ai écrit la pile en Python
Entrée / sortie de données en Python (CSV, JSON)
Lire tous les fichiers csv dans le dossier
Tri sélect écrit en C
Je ne peux pas obtenir l'élément dans Selenium!
J'ai touché à l'outil de préparation de données Paxata
J'ai écrit l'aile coulissante dans la création.
Comment les données passées dans Curl --data-urlencode doivent-elles être représentées dans les requêtes Python?
J'ai recherché Railway Kawayanagi à partir des données
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
Je ne peux pas saisir de caractères dans la zone de texte! ?? !! ?? !! !! ??
[Analyse des données] Dois-je acheter le drapeau Harumi?
L'histoire de la lecture des données HSPICE en Python
J'ai essayé d'implémenter la fonction gamma inverse en python
CSV en Python
J'ai vérifié le calendrier supprimé dans le calendrier de l'Avent Qiita 2016
J'ai essayé d'implémenter Human In The Loop - Partie ① Tableau de bord -
Je veux afficher la progression en Python!
[First data science ⑥] J'ai essayé de visualiser le prix du marché des restaurants à Tokyo
J'ai essayé de représenter graphiquement les packages installés en Python
Je convertis les données AWS JSON en CSV comme ceci
Traitement pleine largeur et demi-largeur des données CSV en Python
Enregistrez collectivement des données dans Firestore à l'aide d'un fichier csv en Python
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de prédire le match de la J League (analyse des données)
Lisez le fichier csv et affichez-le dans le navigateur
À propos de l'inefficacité du transfert de données dans luigi on-memory
[Django] Perform Truncate Table (supprimer toutes les données de la table)
Lire la liste de liens au format csv avec l'outil graphique
Ne pas être conscient du contenu des données en python
J'ai examiné le mappage de données entre ArangoDB et Java
Je veux écrire en Python! (3) Utiliser des simulacres
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Utilisons les données ouvertes de "Mamebus" en Python
Essayez de déchiffrer les données de connexion stockées dans Firefox
[Note] Le module installé ne peut pas être appelé dans jupyter.
Ce que j'ai appris en participant aux qualifications ISUCON10
Je veux utiliser le jeu de données R avec python
Je ne peux pas utiliser la commande darknet dans Google Colaboratory!
Échantillonnage dans des données déséquilibrées
Comment calculer la somme ou la moyenne des données csv de séries chronologiques en un instant
J'ai compté les grains
Essayez de gratter les données COVID-19 Tokyo avec Python
J'ai vérifié le package Python pré-installé dans Google Cloud Dataflow
J'ai participé à l'activité de traduction du document officiel Django
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
J'ai essayé l'algorithme de super résolution "PULSE" dans un environnement Windows
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
Mémo que je suis resté coincé dans l'introduction de Mezzanine
J'ai écrit le fonctionnement de base de Seaborn dans Jupyter Lab