Tips
selenium_success.py
#Rufen Sie die URL der nächsten Seite (zweite Seite) der ersten Seite ab
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
#Schleifenverarbeitung von der zweiten bis zur letzten Seite
while len(next_page_url) > 0:
driver.get(next_page_url)
#Stellen Sie die Wartezeit für das Laden des Elements auf 10 Sekunden ein
driver.implicitly_wait(10)
next_page_html = driver.page_source.encode('utf-8')
#Schreiben Sie hier den Implementierungscode für jeden Prozess
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
else:
print("\n\n Die Verarbeitung der letzten Seite ist abgeschlossen.\n\n")
selenium_failure.py
#Rufen Sie die URL der nächsten Seite (zweite Seite) der ersten Seite ab
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
#Schleifenverarbeitung von der zweiten bis zur letzten Seite
if len(next_page_url) != 0:
driver.get(next_page_url)
#Stellen Sie die Wartezeit für das Laden des Elements auf 10 Sekunden ein
driver.implicitly_wait(10)
next_page_html = driver.page_source.encode('utf-8')
#Schreiben Sie hier den Implementierungscode für jeden Prozess
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
else:
print("\n\n Die Verarbeitung der letzten Seite des Artikelsuchergebnisses ist abgeschlossen.\n\n")
selenium_python_multi_pages_while.py
# coding: utf-8
import time, argparse, datetime
from selenium import webdriver
from bs4 import BeautifulSoup
from pprint import pprint
import pandas as pd
import numpy as np
import time
###Konstante###
url = "http://qiita.com"
###Variable Initialisierungsdeklaration###
pagenum = 0
#Empfangen Sie Befehlszeilenargumente
parser = argparse.ArgumentParser()
#Erhält nur ein Befehlszeilenargument
parser.add_argument('-word', '--search_word', default='Python', help='Bitte geben Sie das Suchwort an, das auf der Artikelsuchseite von Qiita eingegeben werden soll.')
parser.add_argument('-max', '--max_page_num', default='50', help='Wenn mehrere Seiten anwendbar sind und Sie eine Obergrenze für die Anzahl der Seiten festlegen möchten, für die Daten erfasst werden können, geben Sie die Obergrenze an.')
args = parser.parse_args()
search_word = args.search_word
num_of_search_pages = int(args.max_page_num)
print("\n\n Eingegebene Suchzeichenfolge:", args.search_word, "\n")
print("Wenn sich die Artikellistenseite über mehrere Seiten erstreckt{}Der Vorgang wird bis zur Seite gestoppt.".format(num_of_search_pages))
#Name der Ausgabedatei
output_file_name = str(datetime.datetime.now()) + "_Search: " + search_word
###Methodendefinition###
def proceed_each_page(page_num, this_page_html, driver):
from bs4 import BeautifulSoup
this_soup = BeautifulSoup(this_page_html, 'lxml')
print("""
================================
{}Verarbeitungsseite...
===============================
""".format(page_num))
results = this_soup.find_all("h1", class_="searchResult_itemTitle")
#Speichern Sie die Ergebnisse in der Artikeltitelliste
this_page_title_list = []
for result in results:
title_texts = result.findAll("a")
title_texts = str(title_texts[0]).replace("<em>", "").replace("</em>", "").split(">")[1:]
title_texts = title_texts[0]
pos = title_texts.find('</a')
title_text = title_texts[:pos]
this_page_title_list.append(title_text)
console_message = "Auf dem Suchergebnisbildschirm{}Anzahl der Artikel auf der Seite: ".format(pagenum) + str(len(this_page_title_list)) + "\n\n"
pprint(this_page_title_list)
#Speichern Sie die Ergebnisse in der URL-Liste
this_page_url_list = []
for result in results:
href = result.findAll("a")[0].get("href")
this_page_url_list.append(str(url + href))
#Speichern Sie Mitwirkende in der Mitwirkendenliste
# <div class="searchResult_header"><a href="/niiku-y">niiku-y</a>Ist 2019/08/Gepostet in 07</div>
this_page_author_list = []
results = this_soup.findAll(class_="searchResult_header")
for result in results:
author = result.findAll("a")[0].get("href")
author = author.replace("/", "")
this_page_author_list.append(author)
#Speichern Sie die Daten, die der Artikel von der n-ten Seite erhalten hat
this_page_num_list = [page_num]*len(this_page_title_list)
##Holen Sie sich einen Screenshot der n-ten Seite des Suchergebnisbildschirms
#Erhalten Sie vertikale und horizontale Daten zur Bildschirmgröße
w = driver.execute_script("return document.body.scrollWidth;")
h = driver.execute_script("return document.body.scrollHeight;")
driver.set_window_size(w,h)
#Geben Sie den Speicherort und den Dateinamen der Bildschirmaufnahmedatei (Bilddatei) an.
FILENAME = "./{search_word}_page{number}_screen_{datetime}.png ".format(search_word=search_word, number=page_num, datetime=str(datetime.datetime.now()))
#Bild speichern
driver.save_screenshot(FILENAME)
#Gibt jede Liste zurück, die Informationen zur verarbeiteten Webseite enthält
return [this_page_num_list, this_page_author_list, this_page_title_list, this_page_url_list, driver]
###Ende der Methodendefinition
###Hauptverarbeitung
driver = webdriver.Chrome()
#Greifen Sie auf die oberste Seite von Qiita zu
driver.get(url)
#Geben Sie ein Schlüsselwort in das Artikelsuchfeld ein
search = driver.find_element_by_class_name("st-Header_searchInput")
search.send_keys(search_word)
search.submit()
time.sleep(5)
#Rufen Sie den HTML-Code der ersten Seite der Artikellistenseite der Suchergebnisse ab
first_page_html = driver.page_source.encode('utf-8')
#Verarbeiten Sie die erste Seite
page_num = 1
all_page_num_list = []
all_page_author_list = []
all_page_title_list = []
all_page_url_list = []
this_page_num_list, this_page_author_list, this_page_title_list, this_page_url_list, driver = proceed_each_page(page_num, first_page_html, driver)
all_page_num_list = all_page_num_list + this_page_num_list
all_page_author_list = all_page_author_list + this_page_author_list
all_page_title_list = all_page_title_list + this_page_title_list
all_page_url_list = all_page_url_list + this_page_url_list
#Wenn die empfangene Webseite, die vom Treiber angewiesen werden soll, die nächste Seite enthält, fahren Sie mit der nächsten Seite fort.
# next_page_Der Rückgabewert von url ist der Listentyp. Wenn das obige Tag mit der nächsten Seite nicht vorhanden ist, wird eine leere Liste zurückgegeben
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
print("=======")
print(type(next_page_url))
print("=======")
#Ab der zweiten Seite(Letzte Seite oder{num_of_search_pages}Die kleinere Seitenzahl bis zur Seite)Schleifenverarbeitung bis zu
# (num_of_search_pages)Um die Seite zur letzten Seite zu machen{num_of_search_pages -1)Blättern Sie die nächste Seite
while len(next_page_url) > 0 and page_num <= (num_of_search_pages - 1):
driver.get(next_page_url)
#Stellen Sie die Wartezeit für das Laden des Elements auf 10 Sekunden ein
driver.implicitly_wait(10)
#time.sleep(5)
next_page_html = driver.page_source.encode('utf-8')
page_num += 1
this_page_num_list, this_page_author_list, this_page_title_list, this_page_url_list, driver = proceed_each_page(page_num, next_page_html, driver)
all_page_num_list = all_page_num_list + this_page_num_list
all_page_author_list = all_page_author_list + this_page_author_list
all_page_title_list = all_page_title_list + this_page_title_list
all_page_url_list = all_page_url_list + this_page_url_list
next_page_url = driver.find_element_by_class_name("js-next-page-link").get_attribute("href")
print("=======")
print(next_page_url)
print(len(next_page_url))
print("=======")
else:
print("\n\n Die Verarbeitung der letzten Seite des Artikelsuchergebnisses ist abgeschlossen.\n\n")
#Ausgabe einer Excel-Datei
print("\n\n Geben Sie die erfassten Suchergebnisdaten in eine Excel-Datei aus.\n\m")
data = np.array([all_page_num_list, all_page_author_list, all_page_title_list, all_page_url_list]).T
index_list = list(range(len(all_page_num_list)))
column_list = ['Seitenzahl im Suchergebnisbildschirm veröffentlichen', 'Mitwirkender', 'Artikelüberschrift', 'Artikel-URL']
output_df = pd.DataFrame(data, columns=column_list, index=index_list)
pprint(output_df)
#Geben Sie das Ergebnis in eine Excel-Datei aus
output_df.to_excel('./'+output_file_name + '.xlsx', sheet_name='Qiita_Articles_list')
#Schließen und löschen Sie (freier Speicher) die Treiberinstanz, die für den automatischen Zugriff auf die Webseite erstellt wurde
time.sleep(5)
driver.close()
driver.quit()
Console
$ python selenium_python_multi_pages_while.py --help
usage: selenium_python_multi_pages_while.py [-h] [-word SEARCH_WORD]
[-max MAX_PAGE_NUM]
optional arguments:
-h, --help show this help message and exit
-word SEARCH_WORD, --search_word SEARCH_WORD
Bitte geben Sie das Suchwort an, das auf der Artikelsuchseite von Qiita eingegeben werden soll.
-max MAX_PAGE_NUM, --max_page_num MAX_PAGE_NUM
Wenn mehrere Seiten anwendbar sind und Sie eine Obergrenze für die Anzahl der Seiten festlegen möchten, für die Daten erfasst werden können, geben Sie die Obergrenze an.
$
Console
$ python selenium_python_multi_pages_while.py -word Haskell -max 5
Suchzeichenfolge eingegeben: Haskell
Wenn sich die Artikellistenseite auf mehrere Seiten erstreckt, wird der Vorgang nach 5 Seiten beendet.
================================
Bearbeitung der ersten Seite...
===============================
['MD5 mit Haskell#Haskell',
'stylish-Machen Sie haskell kompatibel mit HexFloatLiterals und Numeric Underscores',
'Haskell Tutorial(Haskell Day 2016)',
'Erstellen Sie die schnellste Entwicklungsumgebung mit der Haskell-Erweiterung von VS Code',
'stylish-Stellen Sie sicher, dass haskell BlockArguments entspricht',
'Verwenden von Functor mit Haskell',
'Docker unter Windows 10 Home+Erstellen einer Haskell-Umgebung mit VS Code',
'Docker +Haskells Hello World Build',
'Spielen Sie mit der Haskell-Typklasse',
'Über Haskell's entweder']
=======
<class 'str'>
=======
================================
Bearbeitung der zweiten Seite...
===============================
['Haskell Funktionstypen und Curry#Haskell',
'Haskell und SQLite',
'Erste Schritte mit Haskell',
'Haskell/Eine Sammlung von Referenzen zum Suchen der Bedeutung von GHC-Symbolen',
'Approaching Haskell',
'Haskell Primer Article Memorandum',
'Lesen Sie Haskell in Haskell eingeben',
'[Haskell] Some memo about learning haskell',
'Erste Schritte mit Haskell-Stapelinstallation und -konfiguration',
'Ich habe einen Edelstein namens Haskell erstellt, der Haskells Code in Ruby einbettet!']
=======
https://qiita.com/search?page=3&q=Haskell
41
=======
================================
Bearbeitung der dritten Seite...
===============================
['Lesen Sie Haskell in Haskell eingeben',
'Bereiten Sie die Haskell-Entwicklungsumgebung mit Visual Studio Code vor',
'Warum Haskell lernen?',
'[Haskell] Some memo about learning haskell',
'Installationshinweise für Haskell',
"Konnte nicht mit VS Code't Client starten Haskell IDE erscheint (Windows 10)",
'Hasskell Stack-Verwenden wir es im Modus',
'Haskell studieren Teil 1-Haskell Umweltbau',
'Haskeller versuchte mit Rust anzufangen',
'Richtlinien für den Einstieg in Haskell als Fortgeschrittener']
=======
https://qiita.com/search?page=4&q=Haskell
41
=======
================================
Verarbeitung Seite 4...
===============================
['Haskell im Atom Editor',
'Erstellen Sie mit Haskell einen Reverse-Polish-Notationsrechner',
'Ide im Atom-Editor-Schritte zur Verwendung von Haskell',
'Berühren Sie Haskell auf dem Mac Note 0.1',
'Ich habe Haskell gestartet',
'ATOM ide-Installationsverfahren für Hashkell (MacOS X)',
'[Übersetzung] Unterschied zwischen PureScript und Haskell\u3000+α',
'Haskell Memo',
'Aufbau der Haskell-Entwicklungsumgebung unter Windows 10',
'Sie können in Haskell essen!!']
=======
https://qiita.com/search?page=5&q=Haskell
41
=======
================================
Verarbeitung Seite 5...
===============================
['Haskell Weekly News Japanische Version(Versuch) (5/8)',
'Vollständige Nachricht für Haskell-Experten auf der ganzen Welt',
'Implementierung der Quicktyp-Haskell-Ausgabe zum Generieren von Code für jede Sprache aus JSON',
'haskell-ide-Motoreinführung',
'Der Punkt, der in die Umgebungskonstruktion von Haskell of VS Code unter macOS passt',
'Implementieren Sie das Go Tool mit Haskell',
'Haskell($)Wann(.)Der Unterschied von',
'Antwort von Samuel Gélineau Teil 1(Übersetzung)',
'Haskell Umwelt Bau Memo',
'Haskellers wöchentlicher Rust Introductory Challenge Tag 1#Rust']
=======
https://qiita.com/search?page=6&q=Haskell
41
=======
Die Verarbeitung der letzten Seite der Artikelsuchergebnisse ist abgeschlossen.
Die erfassten Suchergebnisdaten werden in eine Excel-Datei ausgegeben.
\m
Seitenzahl im Suchergebnisbildschirm veröffentlichen Gepostet von\
0 1 Tatsuki-I
1 1 mod_poppo
2 1 hiratara
3 1 sgmryk
4 1 sparklingbaby
5 1 oskats1987
6 1 atsuyoshi-muta
7 1 dd0125
8 1 oskats1987
9 1 Izawa_
10 2 Tatsuki-I
11 2 satosystems
12 2 a163236
13 2 takenobu-hs
14 2 pumbaacave
15 2 F_cy
16 2 nka0i
17 2 zhupeijun
18 2 sparklingbaby
19 2 gogotanaka
20 3 nka0i
21 3 legokichi
22 3 arowM
23 3 zhupeijun
24 3 tnoda_
25 3 yutasth
26 3 t-mochizuki
27 3 CPyRbJvCHlCs
28 3 kanimum
29 3 Lugendre
30 4 eielh
31 4 inatatsu_csg
32 4 busyoumono99
33 4 hiroyuki_hon
34 4 Cj-bc
35 4 nakamurau1@github
36 4 hiruberuto
37 4 sahara
38 4 kitsukitsuki
39 4 reotasosan
40 5 imokurity
41 5 reotasosan
42 5 algas
43 5 dyoshikawa
44 5 dsm
45 5 kwhrstr1206
46 5 TTsurutani
47 5 reotasosan
48 5 1ain2
49 5 Tatsuki-I
Artikelüberschrift\
0 Haskell MD5#Haskell
1 stylish-haskell zu Hex Float Literals und Numeric Unders...
2 Haskell Tutorial(Haskell Day 2016)
3 Erstellen Sie die schnellste Entwicklungsumgebung mit der Haskell-Erweiterung von VS Code
4 stylish-Stellen Sie sicher, dass haskell BlockArguments entspricht
5 Verwenden von Functor mit Haskell
6 Docker unter Windows 10 Home+Erstellen einer Haskell-Umgebung mit VS Code
7 Docker +Haskells Hello World Build
8 Spielen Sie mit der Haskell-Formklasse
9 Über Haskell's Entweder
10 Haskell-Funktionstypen und Curry#Haskell
11 Haskell und SQLite
12 Erste Schritte mit Haskell
13 Haskell/Eine Sammlung von Referenzen zum Suchen der Bedeutung von GHC-Symbolen
14 Approaching Haskell
15 Haskell-Einführungsartikel-Memorandum
16 Lesen Sie die Eingabe von Haskell in Haskell
17 [Haskell] Some memo about learning haskell
18 Erste Schritte mit Haskell-Stapelinstallation und -konfiguration
19 Ich habe einen Edelstein namens Haskell erstellt, der Haskells Code in Ruby einbettet!
20 Lesen Sie die Eingabe von Haskell in Haskell
21 Bereiten Sie die Haskell-Entwicklungsumgebung mit Visual Studio Code vor
22 Warum Haskell lernen?
23 [Haskell] Some memo about learning haskell
24 Haskell-Installationshinweise
25 VS-Code konnte nicht't Client starten Haskell IDE kommt heraus (Wi...
26 Stapel haskell-Verwenden wir es im Modus
27 Haskell-Studie Teil 1-Haskell Umweltbau
28 Haskeller hat mit Rust angefangen
29 Richtlinien für den Einstieg in Haskell als Zwischenstufe
30 Haskell im Atom Editor
31 Erstellen Sie mit Haskell einen Reverse-Polish-Notationsrechner
32 ide im Atom Editor-Schritte zur Verwendung von Haskell
33 Berühren Sie Haskell auf dem Mac Note 0.1
34 Ich habe Haskell gegründet
35 ATOM ide-Installationsverfahren für Hashkell (MacOS X)
36 [Übersetzung] Unterschied zwischen PureScript und Haskell + α
37 Haskell Hinweis
38 Erstellen einer Haskell-Entwicklungsumgebung unter Windows 10
39 Sie können in Haskell essen!!
40 Haskell Weekly News Japanische Ausgabe(Versuch) (5/8)
41 Vollständige Nachricht an Haskell-Experten auf der ganzen Welt
42 Implementierte Haskell-Ausgabe vom Quicktyp, um Code für jede Sprache aus JSON zu generieren
43 haskell-ide-Motoreinführung
44 Der Punkt, der in die Umgebungskonstruktion von Haskell of VS Code unter macOS passt
Implementieren Sie 45 Go Tool mit Haskell
46 Haskell($)Wann(.)Der Unterschied von
47 Antwort von Samuel Gélineau Teil 1(Übersetzung)
48 Haskell Umwelt Bau Memo
49 Haskellers wöchentlicher Rust Introductory Challenge Tag 1#Rust
Artikel-URL
0 http://qiita.com/Tatsuki-I/items/6d4a2d9f767ae...
1 http://qiita.com/mod_poppo/items/418da906f6621...
2 http://qiita.com/hiratara/items/169b5cb83b0adb...
3 http://qiita.com/sgmryk/items/bc99efe36ad1c910...
4 http://qiita.com/sparklingbaby/items/a46f299dd...
5 http://qiita.com/oskats1987/items/30f9078c5096...
6 http://qiita.com/atsuyoshi-muta/items/9dd10d48...
7 http://qiita.com/dd0125/items/a141000ead36b382...
8 http://qiita.com/oskats1987/items/dcd46780ff5e...
9 http://qiita.com/Izawa_/items/ed0579a0e7d93e5c...
10 http://qiita.com/Tatsuki-I/items/d1d122107da8c...
11 http://qiita.com/satosystems/items/32bf104a041...
12 http://qiita.com/a163236/items/5e0d0e373e87ca8...
13 http://qiita.com/takenobu-hs/items/b95f0a4409c...
14 http://qiita.com/pumbaacave/items/17e6699d4db8...
15 http://qiita.com/F_cy/items/9c49e351196943e38ad9
16 http://qiita.com/nka0i/items/d44f0c6d4df1ef582fd3
17 http://qiita.com/zhupeijun/items/4abcc5fa1cdce...
18 http://qiita.com/sparklingbaby/items/a901cb3a7...
19 http://qiita.com/gogotanaka/items/78a3ffd04abc...
20 http://qiita.com/nka0i/items/d44f0c6d4df1ef582fd3
21 http://qiita.com/legokichi/items/8e7a68ffee522...
22 http://qiita.com/arowM/items/0305d4f439752f285438
23 http://qiita.com/zhupeijun/items/4abcc5fa1cdce...
24 http://qiita.com/tnoda_/items/22b265fe9ad8ee1e...
25 http://qiita.com/yutasth/items/28af2eb0371f645...
26 http://qiita.com/t-mochizuki/items/d831df3a920...
27 http://qiita.com/CPyRbJvCHlCs/items/9da9b43b55...
28 http://qiita.com/kanimum/items/d89547235070038...
29 http://qiita.com/Lugendre/items/70e517e59698e0...
30 http://qiita.com/eielh/items/b2e85f8ea4c6cdb8012d
31 http://qiita.com/inatatsu_csg/items/b035c76ec6...
32 http://qiita.com/busyoumono99/items/220bd3c30f...
33 http://qiita.com/hiroyuki_hon/items/3eb41a16fe...
34 http://qiita.com/Cj-bc/items/583fa82805775cf17dd6
35 http://qiita.com/nakamurau1@github/items/7feae...
36 http://qiita.com/hiruberuto/items/3eb21ef81b3d...
37 http://qiita.com/sahara/items/7c7ef646fb3e9b08...
38 http://qiita.com/kitsukitsuki/items/a56cbfc0de...
39 http://qiita.com/reotasosan/items/e80ab706baef...
40 http://qiita.com/imokurity/items/f90e4c35c74fe...
41 http://qiita.com/reotasosan/items/2b37fdef025a...
42 http://qiita.com/algas/items/1ebb9b8c77fc5f344708
43 http://qiita.com/dyoshikawa/items/a1789bf7ff1d...
44 http://qiita.com/dsm/items/861d08844b1fba32f07b
45 http://qiita.com/kwhrstr1206/items/fdf460f2a9a...
46 http://qiita.com/TTsurutani/items/201200c1f288...
47 http://qiita.com/reotasosan/items/cce796d32105...
48 http://qiita.com/1ain2/items/09ad8b0e4992f7ceae0f
49 http://qiita.com/Tatsuki-I/items/e19953c051e55...
$
(Die Screenshot-Bilddatei auf der mittleren Seite wird weggelassen.)
Console}
$ python selenium_python_multi_pages_while.py -Wortkugeltheorie-max 20
Recommended Posts