Oups! C'est bon à mâcher et il semble que 2 loups survivent, alors je vais au pilier du chat noir!
Si vous enregistrez les données, vous ne pourrez pas comprendre comment gérer les virgules, et après tout JSON est plus stable que CSV! ?? (Je ne sais pas ...) Vous n'avez pas du tout besoin de feuilles de calcul ou d'Excel, non? Que pourrai-je dire un jour ...?
Donc, j'ai fait une suite de la dernière fois, donc je vais le publier.
Part1: https://qiita.com/Jessica_nao_/items/b9f38a4413e424e3e585 Entraînez-vous à récupérer et nettoyer la source en une seule page!
Part2: https://qiita.com/Jessica_nao_/items/76efc0b99ff18c0e6bd7 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 ~.
--Partie3: Cette page! J'ai pensé qu'il serait préférable d'utiliser JSON même s'il y avait ":" ou "," dans les données, donc je l'ai sauvegardé en tant que liste de liste JSON! Je pense que ça fait du bien parce que je l'ai réparé un peu.
Je vais vous expliquer les fonctions dans l'ordre du haut!
--mkFN
: Une fonction qui crée un nom de fichier!
--gettxt2
: Enregistrez la source sous forme de texte lors de la navigation sur la page Web! Ceci est fait pour qu'une fois que vous le faites, toutes les pages que vous voulez soient affichées dans l'ordre! Cette fois, il y a un élément appelé "Suivant", et j'ai essayé de répéter "Cliquez ici → Récupérer l'élément de la page affichée"!
--trimming
: J'ai coupé tous les fichiers et les ai enregistrés dans un autre fichier txt!
--removeTagForJSON
: Formatez-le dans un fichier JSON! Tout d'abord, j'ai supprimé la balise et mis des parenthèses pour que la dernière liste n'ait pas de virgule, et il était gênant de faire des ajustements fins ~ pleurer
--ʻAddBlackets`: Au début et à la fin, j'ai ajouté un crochet []! J'ai fait beaucoup de refaire avec les ajustements fins ci-dessus à plusieurs reprises! Lol
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, mais y avait-il des caractères qui ne pouvaient 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"],
["JSON_fin_",".json"],
]
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.")
#Je ne sais pas pourquoi, mais il semble que je doive 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'</table></div><div class="sample"',
]
#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 removeTagForJSON(cnt):
beforeAfter = [
[r'<tr.*?><td.*?>','\t["'],
[r'</td><td.*?>','","'],
[r'</td></tr>','"],\n'],
[r'<.*?>', ""],
]
with open(mkFN(cnt,1),encoding=mojicode) as f:
contents = f.read()
for i in range(0,4):
contents = re.sub(beforeAfter[i][0],beforeAfter[i][1],contents)
option = "a"
if cnt == 0:
option = "w"
with open(mkFN("all",1),option,encoding=mojicode) as f:
f.write(contents)
def addBlackets():
with open(mkFN("all",1),encoding=mojicode) as f:
contents = f.read()
contents = "[\n" + contents[0:-2] + '\n]'
option = "w"
with open(mkFN("all2",3),option,encoding=mojicode) as f:
f.write(contents)
cnt = 20
gettxt2(cnt)
sleep(2)
for i in range(0,cnt):
trimming(i)
print("trimming: done!")
for i in range(0,cnt):
removeTagForJSON(i)
sleep(1)
addBlackets()
Cette fois, c'est environ 20 pages, donc j'ai fait des fichiers un par un, mais cela semble difficile si je n'écris pas après avoir correctement mis en forme lorsque 8000 pages ou plus transitions! Lol Mais tant que je ne vais pas à 100100 pages, puis-je simplement le laisser tel quel?
Recommended Posts