[PYTHON] i-Town Page Scraping: Ich wollte den Platz von Wise-Kun einnehmen

Hintergrund

Excel namens Kenshakun, um umfassend spezifische Informationen zu i Town Page zu erhalten. Das Makro wurde verteilt, kann jedoch aufgrund einer Spezifikationsänderung auf der Seite der i-town-Seite im November 2019 nicht mehr verwendet werden. Als Übung zum Schaben forderte ein Python-Anfänger (ein wenig berührt in einer Universitätsvorlesung) das Programmieren mit einem Seufzer heraus. Das ultimative Ziel ist es, "den Namen / die Adresse / die Kategorie des Geschäfts aus einer bestimmten kleinen Kategorie zu ermitteln".

Bestätigung der Bedingungen

Obwohl es sich um eine Stadtseitenvereinbarung handelt, sind die folgenden zwei Punkte verboten. ・ Handlungen, die einen großen Einfluss auf den Service der i-town-Seite haben ・ Der wiederholte Zugriff auf die i-town-Seite mit einem Programm, auf das automatisch zugegriffen wird https://itp.ne.jp/guide/web/notice/ Diesmal ist es ein verdammter Code, der nur den Knopf drückt, um die Fortsetzung der Seite nach unten zu laden. Ich gehe also davon aus, dass es sich eher um die Kategorie der normalen Verwendung als um den wiederholten Zugriff handelt (Wenn dies nicht möglich ist, können Sie selbst bei normaler Verwendung nicht den unteren Bereich erreichen Spezifikation……).

Umgebung

Code

Selen-Installation

Auf Anaconda Prompt

pip install selenium

Angeben des Treibers ・ Starten von Chrome

driver = webdriver.Chrome(executable_path='/Users/*****/*****/Selenium/chromedriver/chromedriver.exe')
driver.get('https://itp.ne.jp/genre/?area=13&genre=13&subgenre=177&sort=01&sbmap=false')

Starten Sie nach Angabe des Treibers die im Browser angegebene URL. Dieses Mal habe ich den Pachinko-Shop durchsucht, daher ist es die URL bei der Suche im Bereich "Tokio" und in der Kategorie "Indoor-Spiel".

Anzeige in der unteren Zeile

while True:
    try:
        driver.find_element_by_class_name('m-read-more__text').click()
    except:
        print('☆ "Mehr Anzeige" Ende wiederholter Treffer ☆')
        break

Drücken Sie wiederholt die Taste "Mehr anzeigen", bis eine Fehlermeldung angezeigt wird (= in der unteren Zeile). Dadurch werden alle Informationen zum Treffer-Store in HTML angezeigt.

Sammeln Sie den Kategorienamen

elist = []
elems = driver.find_elements_by_class_name("m-article-card__header__category")
for e in elems:
     elist.append(e.text)
print(elist)

str_ = '\n'.join(elist)
print(str_)
with open("str_.txt",'w')as f:
    f.write(str_)

Erstellen Sie eine leere Liste und werfen Sie den inneren Text des Elements, dessen Klassenname m-article-card__header__category lautet, hinein. Danach wird die Liste in Sätze mit Zeilenumbrüchen um jeweils ein Element konvertiert und als Text ausgegeben.

das Ende

flist = []
elems2 = driver.find_elements_by_class_name("m-article-card__header__title__link")
for f in elems2:
     flist.append(f.text)
print(flist)

str2_ = '\n'.join(flist)
print(str2_)
with open("str2_.txt",'w')as f:
    f.write(str2_)


glist = []
elems3 = elems2 = driver.find_elements_by_class_name("m-article-card__lead__caption")
for g in elems3:
     glist.append(g.text)
print(glist)

str3_ = '\n'.join(glist)
print(str3_)
with open("str3_.txt",'w')as f:
    f.write(str3_)


print('Erfolg')
driver.quit()

Titel und Beschriftung (Adresse, Telefonnummer, nächstgelegener Sender) werden ebenfalls auf die gleiche Weise ausgegeben.

Wo es stecken bleibt

Wo es gelöst wurde

・ Vergessen Sie hinzuzufügen: (Doppelpunkt) nach für ・ Ich weiß nicht, wie ich es unendlich wiederholen soll → Während wahr: Es war. Ich blieb stecken, selbst als True mit einem Großbuchstaben begann ・ Ich kann nicht in eine Datei schreiben → Die Ursache war, dass der Dateiname nicht in "" eingeschlossen war. ・ Ich weiß nicht, wie ich den Speicherort von chromeDriver angeben soll → Ich habe nur den Ordner angegeben, der den Chrome-Treiber enthält. Geben Sie natürlich Chromedriver.exe an

Ungelöste Probleme

・ Ich weiß nicht, was Pip ist ・ Ich verstehe die Struktur von HTML nicht → Ich habe es doch nicht verstanden, also habe ich beschlossen, den Browser mit Selenium auszuführen ・ Zusätzlich zu [Adresse] sind [Telefonnummer] und [Nächste Station] enthalten. → Dies ist ziemlich fatal und es ist wahrscheinlich besser, einen Speicher als Gruppe zu schreiben (diesmal wurde er von Excel verarbeitet). Ich habe vor, es bei Bedarf ernsthaft umzuschreiben

Andere

・ Die URL zur Anzeige aller Geschäfte im ganzen Land lautet https://itp.ne.jp/genre/ ・ Die URL für die Anzeige von Geschäften in Tokio lautet https://itp.ne.jp/genre/?area=13

20.12.2019 Nachtrag

Mir ist aufgefallen, dass das Formatieren einfacher ist, indem nach Speicher mit class = "o-result-article-list__item" gesammelt wird, als nach Kategorie, Titel und Adresse.

Recommended Posts

i-Town Page Scraping: Ich wollte den Platz von Wise-Kun einnehmen
I-Town-Seite mit Selen abkratzen
Hash-Kette wollte ich vermeiden (2)
Ich wollte cGAN zu ACGAN weiterentwickeln
Hash-Kette wollte ich vermeiden (1)
Ich wollte ABC160 mit Python lösen
Ich wollte ABC159 mit Python lösen
Ich wollte ABC172 mit Python lösen
Ich wollte unbedingt mit Selen kopieren
DQN mit TensorFlow implementiert (ich wollte ...)
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich wollte mit der Bezier-Kurve spielen
Ich wollte Python 3.4.3 mit Homebrew + pyenv installieren
Ich möchte die Produkte verkaufen, die ich durch Python Scraping Mercari aufgelistet habe
Ich wollte nur Pythons Pickle-Modul verstehen
Ich habe versucht zu kratzen
Ich wollte auch Typhinweise mit numpy überprüfen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
[Fehler] Ich wollte Sätze mit Flairs TextRegressor generieren
Eine Geschichte über den Wunsch, die Django-Administrationsseite ein wenig zu ändern