[Erster Beitrag] Ich wollte den Artikel in Qiita erhalten, indem ich das Tag spezifizierte, also habe ich ihn in Python implementiert. Der Grund, warum ich überhaupt daran gearbeitet habe, war, dass ich den Livedoor News Corpus verwendet habe, um Artikelkategorien nach maschinellem Lernen zu klassifizieren, und mir wurde geraten, dass ich dasselbe mit Qiitas Artikeln tun möchte. .. .. Es mag etwas schwierig sein zu verstehen, wie man den Code schreibt, aber in diesem Fall möchte ich, dass Sie mich in den Kommentaren informieren.
Es ist eine von Qiita bereitgestellte Web-API, mit der Sie verschiedene Daten erfassen und Artikel veröffentlichen können. https://qiita.com/api/v2/docs
Es gibt eine Obergrenze für den Erwerb von Artikeln, die Obergrenze für Seiten beträgt jeweils 100 und die Obergrenze für pro Seite (wie viele Artikel für jede Seite erfasst werden) beträgt 100, sodass maximal 10.000 Artikel erfasst werden können.
Es ist jedoch eine Benutzerauthentifizierung erforderlich. Seien Sie also vorsichtig.
Akzeptiert Anforderungen bis zu 1000 Mal pro Benutzer und Stunde im authentifizierten Zustand und bis zu 60 Mal pro Stunde pro IP-Adresse im nicht authentifizierten Zustand. (Vom Qiita API-Beamten)
Dieses Mal möchte ich insgesamt 900 Artikel pro Seite erhalten, also mache ich Seite = 100, pro Seite = 1 x 9 Mal.
Holen Sie sich zunächst das für die Benutzerauthentifizierung erforderliche Zugriffstoken.
-Wählen Sie "Anwendung" aus "Einstellungen"
・ "Persönliches Zugriffstoken" → "Neues Token ausstellen"
・ Setzen Sie dieses Mal ein Häkchen nur für read_qiita und "issue"
・ Ein Token wird ausgestellt, kopieren Sie ihn also.
#Header für die Benutzerauthentifizierung erforderlich
h = {'Authorization': 'Träger [Zugriffstoken erhalten]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"
#Geben Sie das Tag an, das Sie erhalten möchten
query = "&query=tag%3A" + tag_name
#Ermitteln Sie die Anzahl der Artikel, die innerhalb des in der Suche angegebenen Zeitraums erstellt wurden
connect.request("GET", url + query, headers=h)
#Antwort auf Anfrage
res = connect.getresponse()
#Antwort lesen
res.read()
#Antwort vom Server
print(res.status, res.reason)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))
#Holen Sie sich Daten und schreiben Sie 100 Artikel in die TXT-Datei
for pg in range(100):
pg += 1
page = "page=" + str(pg) + "&per_page=1"
connect.request("GET", url + page + query, headers=h)
res = connect.getresponse()
data = res.read().decode("utf-8")
#json file data pandas.Im DataFrame-Format gespeichert
df = pd.read_json(data)
#Angeben einer txt-Datei
filename = "./qiita/" + tag_name + "/page/" + str(pg) + ".txt"
#Holen Sie sich Titel und Text aus dem Qiita-Artikel
df.to_csv(filename, columns=[
'title',
'body',
], header=False, index=False)
print(str(pg) + "/" + str(100) + "Erledigt")
Bei der Benutzerauthentifizierung im Header
'Träger [Zugriffstoken erhalten]'}
Es ist erforderlich, das Token für die Authentifizierung wie in anzugeben.
## Holen Sie sich json-Datei
In der Qiita-API sind die veröffentlichten Daten eine JSON-Datei.
https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF
Wenn ich es bekomme, verwende ich die Funktion read_json der Pandas-Bibliothek, um es in das DataFrame-Format von Pandas zu konvertieren.
# Code, um 900 Artikel mit dem angegebenen Tag zu erhalten
Hier ist der gesamte Code.
```python
#Bibliothek importieren
import http.client
import pandas as pd
import time
#Anzahl der Seiten, die Sie erhalten möchten
TOTAL_PAGE = 900
TIME = int(TOTAL_PAGE / 100)
PER_PAGE = 1
#Benutzerauthentifizierung
h = {'Authorization': 'Träger [Zugriffstoken erhalten]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"
#Tag zum Angeben
tag_name = "Java"
#Zählvariable
num = 0
pg = 0
count = 0
#Artikel nur für PAGE wiederholt per Tag abrufen
query = "&query=tag%3A" + tag_name
#Ermitteln Sie die Anzahl der Artikel, die innerhalb des in der Suche angegebenen Zeitraums erstellt wurden
connect.request("GET", url + query, headers=h)
#Antwort auf Anfrage
res = connect.getresponse()
#Antwort lesen
res.read()
#Antwort vom Server
print(res.status, res.reason)
print("Angegebenes Tag: " + tag_name)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))
#Holen Sie sich Daten und schreiben Sie 900 Artikel in die TXT-Datei
for count in range(TIME):
count += 1
for pg in range(100):
pg += 1
page = "page=" + str(pg) + "&per_page=" + str(PER_PAGE)
connect.request("GET", url + page + query, headers=h)
res = connect.getresponse()
data = res.read().decode("utf-8")
df = pd.read_json(data)
filename = "./qiita/" + tag_name + "/page" + str(count) + "-" + str(pg) + ".txt"
df.to_csv(filename, columns=[
'title',
'body',
], header=False, index=False)
print(str(count) + ":" + str(pg) + "/" + str(100) + "Erledigt")
Es ist schwer zu verstehen, aber ich habe 900 Artikel.
Dieses Mal habe ich es durch Angabe des Titels und des Hauptteils des Artikels erhalten, aber ich kann auch die "Anzahl der Likes" und das "Aktualisierungsdatum" abrufen. Wenn Sie also andere Artikel wünschen, wenden Sie sich bitte an den Qiita API-Mitarbeiter. Bitte versuche!
・ Qiita API-Beamter https://qiita.com/api/v2/docs
・ Holen Sie sich Qiita-Artikelinformationen mit API und schreiben Sie sie in CSV https://qiita.com/arai-qiita/items/94902fc0e686e59cb8c5
Recommended Posts