[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!

en premier

Oups! Récemment, je suis Jesse (je suis de Human Wolf J ~ ♪) avec seulement 15 chats inversés! J'ai fait une suite de la dernière fois, donc je vais le sortir! Si vous le souhaitez, lisez le précédent (https://qiita.com/Jessica_nao_/items/b9f38a4413e424e3e585)!

Chose que tu veux faire

Il n'y a qu'une seule URL, mais je voulais extraire toutes les données du tableau, qui contient 20 pages de 100 éléments chacune, à la fois. J'ai le webdriver sélénium pour faire de mon mieux! Oh, comme le dit la balise, j'utilise Python3!

Crawling x grattage avec Python et Selenium!

--Partie2: Cette page! J'ai utilisé Chrome Webdriver pour cliquer sur un élément de la page pour le déplacer! Les données ont été enregistrées au format csv ~.

Contenu

Réflexion

Je pense que c'était assez intelligent d'avoir une fonction pour créer un nom de fichier! Lol

Étant donné que la partie à exporter le fichier est apparue plusieurs fois, c'est aussi

sample.py


 def mkFile():

J'ai pensé qu'il aurait été préférable de coller le processus ci-dessous et de le diviser en fonctions.

De plus, je pense que c'est probablement la pierre d'achoppement la plus difficile, Le chargement de la page prendra un certain temps, alors assurez-vous de faire une pause! C'est ↓↓

sample.py


 sleep(3):

N'oubliez pas d'importer le sommeil de temps en premier car vous avez une pause!

Livrables

sample.py


import re
from selenium import webdriver
from time import sleep

#Je pensais qu'il valait mieux l'ouvrir avec Excel, alors Shift_Je suis allé à JIS une fois,
#Y a-t-il des caractères qui ne peuvent pas être affichés? Je ne sais pas, mais j'ai abandonné parce que j'ai eu une erreur.
mojicode = "utf8"

def mkFN(cnt,typeindex):
    types = [
        ["sample_", ".txt"],
        ["trimmed_", ".txt"],
        ["fin_", ".csv"],
    ]
    cntstr = str(cnt)
    if len(cntstr) == 1:
        cntstr = "0" + cntstr
    ans = "data/"
    ans += types[typeindex][0] + cntstr + types[typeindex][1]
    return ans

def gettxt2(cnt):
    url = "https://www.sample.com"
    path = "/Users/sample/Downloads/chromedriver"
    fn0 = "data/sample"
    fn1 = ".txt"
    
    driver = webdriver.Chrome(path)
    driver.get(url)
    sleep(3)
    output = driver.page_source
    filename = mkFN(0,0)
    with open(filename,"w",encoding=mojicode) as f:
        f.write(output)
    print(filename + ": done.")

    #Avez-vous l'impression de devoir l'initialiser à nouveau?
    output = driver.page_source
    sleep(3)

    for i in range(1,cnt):
        element = driver.find_element_by_link_text("Next")
        element.click()
        sleep(3)
        output = driver.page_source

        filename = mkFN(i,0)
        with open(filename,"w",encoding=mojicode) as f:
            f.write(output)
        print(filename + ": done.")


def trimming(cnt):
    filename = mkFN(cnt,0)
    filename2 = mkFN(cnt,1)
    with open(filename) as f:
        contents = f.read()
    regexen = [
        r'<tbody><tr class="jsgrid-row">',
        r'</td></tr></tbody></table></div><div class="jsgrid-pager-container"',
    ]
    #La forme plurielle d'index est index
    indices = [0,0]

    for i in range(0,2):
        matchObj = re.search(regexen[i],contents)
        indices[i] = matchObj.start()
    rslt = contents[indices[0]:indices[1]]

    with open(filename2,"w",encoding=mojicode) as f2:
        f2.write(rslt)

def removeTag(cnt):

    beforeAfter = [
        [r'</tr>', "\n"],
        [r'</td>', ","],
        [r'<.*?>', ""],
    ]

    with open(mkFN(cnt,1),encoding=mojicode) as f:
        contents = f.read()

    for i in range(0,3):
        contents = re.sub(beforeAfter[i][0],beforeAfter[i][1],contents)

    #Ajoutez des virgules et des sauts de ligne à la fin du fichier!
    contents += ",\n"
    
    option = "a"
    if cnt == 0:
        option = "w"
    with open(mkFN("all",2),option,encoding=mojicode) as f:
        f.write(contents)


cnt = 20
gettxt2(cnt)

print("gettxt: done!")
sleep(1)


for i in range(0,cnt):
    trimming(i)
print("trimming: done!")

sleep(1)

for i in range(0,cnt):
    removeTag(i)
print("removeTag: done!")

À la fin

Parce que j'ai lutté pendant quelques heures, je n'ai pas pu m'arrêter de crier à la fin quand j'ai vu de plus en plus d'informations ajoutées en quelques minutes! Lol J'espère m'y habituer un peu plus et me préparer dans environ 30 minutes.

référence

--À propos de l'exportation de fichiers: https://www.javadrive.jp/python/file/index3.html#section3

Recommended Posts

[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
Déplacez la tortue à l'endroit où vous cliquez sur la souris avec la tortue en Python
[CleanArchitecture with Python] Partie 2: Couche Frameworks & Drivers: Présentation du Web
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
Récupérez la source de la page à charger indéfiniment avec python.
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
[Note personnelle] Scraping de pages Web en python3
Télécharger des fichiers sur le Web avec Python
[Part1] Scraping avec Python → Organisez jusqu'à csv!
La route de la compilation vers Python 3 avec Thrift
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Le moyen le plus simple de synthétiser la voix avec python
Essayez de résoudre le diagramme homme-machine avec Python
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Dites bonjour au monde avec Python avec IntelliJ
Essayez d'utiliser le framework Web Python Tornado Partie 1
[python] Récupérez rapidement les métadonnées de la page Web avec lassie
Le moyen le plus simple d'utiliser OpenCV avec python
[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
Comment mesurer le temps d'exécution avec Python Partie 1
Introduction à Python avec Atom (en route)
Essayez d'utiliser le framework Web Python Tornado Partie 2
Comment mesurer le temps d'exécution avec Python, partie 2
Extraire des données d'une page Web avec Python
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Essayez de résoudre le livre des défis de programmation avec python3
[Introduction à Python] Comment itérer avec la fonction range?
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
J'ai essayé de résoudre Soma Cube avec python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Convertissez l'image au format .zip en PDF avec Python
Je veux hériter de l'arrière avec la classe de données python
Application Web réalisée avec Python3.4 + Django (Construction de l'environnement Part.1)
Comment télécharger avec Heroku, Flask, Python, Git (Partie 1)
Spécifiez MinGW comme compilateur utilisé dans Python
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Traitement d'image avec Python (partie 2)
J'ai essayé de trouver l'entropie de l'image avec python
Je veux pouvoir analyser des données avec Python (partie 3)
Connectez-vous à BigQuery avec Python
J'ai essayé de simuler la propagation de l'infection avec Python
Etudier Python avec freeCodeCamp part1
Images en bordure avec python Partie 1
Web scraping avec python + JupyterLab
Je voulais résoudre le concours de programmation Panasonic 2020 avec Python
Grattage avec Selenium + Python Partie 1
La première API à créer avec le framework Python Djnago REST
Je veux pouvoir analyser des données avec Python (partie 1)
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Probablement le moyen le plus simple de créer un pdf avec Python 3
Python> Liste> partitions = [0] * len (all_filepaths) / partitions [: test_set_size] = [1] * Après avoir créé une liste avec test_set_size> 0, définissez la partie avant sur 1.
Déplacez ce que vous avez installé avec pip dans l'environnement conda