Request.get()

Django, Flask, Bottle, WSGI, CGI…
Antworten
LastSinner
User
Beiträge: 4
Registriert: Mittwoch 15. August 2018, 13:44

Mittwoch 15. August 2018, 13:55

Hallo zusammen,

ich habe eine Frage über die Request.get Methode.

Ich probiere mit einem Programm zu scrapen. Dort sende ich eine Anfrage, dass mir die letzten 50 Beiträge geholt werden. Dies funktioniert auch, allerdings werden teilweise wieder die gleichen Beiträge im nächsten Schleifengang geholt. Meine Frage daher, ist es möglich in der Request.get (url, ....ggf.hier in den Parameters...) nach dem letzten Timestamp (den ich von dem vorherigen Schleifengang bekommen habe) zu suchen bzw die Einträge zu bekommen?
ps: und auch nur die Einträge die neu (nach dem Timestamp) hochgeladen wurden??

Ich hoffe man versteht einigermaßen was ich meine ^^

Viele Grüße
__deets__
User
Beiträge: 3731
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 15. August 2018, 13:58

Ob das geht, haengt nicht an requests, sondern an deiner Webseite. Entweder erlaubt die Suchanfrage das schon. Wenn nicht, dann geht es vielleicht, dass die resultierenden URLs stabil sind, das heisst, du musst dir die zwar alle abholen, aber schmeisst die Eintraege weg, die du schon kennst. Oder sie liefern immer alles irgendwie zufaellig benannt aus (unwahrscheinlich, aber nicht unmoeglich), dann kannst du da nur mit Text/Inhaltsvergleichen arbeiten.
LastSinner
User
Beiträge: 4
Registriert: Mittwoch 15. August 2018, 13:44

Mittwoch 15. August 2018, 14:12

Hi,

danke für die schnelle Antwort.

Also ich bezieh mich auf die Seite "Pastebin". ( last_posts = requests.get('https://scrape.pastebin.com/api_scraping.php?limit=' + post_limit))
Dort bekomme ich dann 10 Pastes (von mir eingestellt, jeder paste hat ein "Date" was ich als Zeitstempel nutzen wollte) gebe sie dann in Json (dort sind dann die Paste als Liste (jedoch auch nicht sortiert)) , usw.

ich bin jetzt nicht der Profi :D wie könnte das z.B in deiner Erklärung aussehen?
die request ist doch die Suchanfrage oder??
__deets__
User
Beiträge: 3731
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 15. August 2018, 14:42

Ich kann diese URL nicht benutzen, weil ich da nicht angemeldet bin. Und das nun auch nicht extra tun will. Wenn du URLs bekommst, dann zeig wie die aussehen, in zwei aufeinanderfolgenden Requests. Bzw. du hast ja schon festgestellt, dass die sich ueberlappen. Woran machst du das denn fest? Wenn du da ein Kriterium hast, dann musst du das doch einfach nur in Code giessen, und gut ist. Zb eine ID 'https://scrape.pastebin.com/paste=ID" oder wie auch immer die Dinger aussehen. Oder gar die ganze URL.
Benutzeravatar
__blackjack__
User
Beiträge: 1450
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 15. August 2018, 14:54

@LastSinner: In jedem Datensatz ist ein 'key' enthalten an dem man die Datensätze identifizieren kann. Genau der wird bei den beiden anderen API-Endpunkten ja auch als Argument verwendet. Du musst Dir halt merken welche Schlüssel Du schon gesehen/verarbeitet hast.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
LastSinner
User
Beiträge: 4
Registriert: Mittwoch 15. August 2018, 13:44

Mittwoch 15. August 2018, 15:18

Ok danke nochmal für die Antworten.

Das mit dem Key/ Identifier verstehe ich. Aber ich möchte alle neuen Pastes die zb. nach 12:30:00Uhr kommen durchsuchen, dann dort schauen, welcher Zeitstempel ist der höchste (z.b. 12:30:51Uhr )und in der nächsten Schleife den Zeitpunkt auf den höchsten Zeitstempel setzen (wie bsp. 12:30:51Uhr)..danach wieder von den letzten 10 Pastes den höchsten Zeitstempel (zb. 12:31:14Uhr) usw.

Wenn ich jetzt ein Request mache, kommen 10 Paste mit unterschiedlichen Zeitstempeln:
so sieht es dann aus:
({'date': '1534341344', 'expire': '0', 'full_url': 'https://pastebin.co.../xZsdsW3r', 'key': 'xZsdsW3r', 'scrape_url': 'https://scrape.past...=xZsdsW3r', 'size': '45083', 'syntax': 'text', 'title': 'Something', 'user': ''})

ich würde aber gerne schon vorher nur die Pastes abholen, die nach meinem gesetzten Zeitstemple kommen.
Benutzeravatar
__blackjack__
User
Beiträge: 1450
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 15. August 2018, 15:23

@LastSinner: Das gibt die API halt nicht her. Die liefert immer die letzten n Pastes, anscheinend ohne bestimmte Ordnung. Und das identifizierende Merkmal ist der 'key'.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
__deets__
User
Beiträge: 3731
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 15. August 2018, 15:24

Das ist eine Frage der API. KANN die das? Hat die ein Argument, mit dem du ein solches Mindestdatum angeben kannst? Das muss in deren API-Dokumentation stehen.
LastSinner
User
Beiträge: 4
Registriert: Mittwoch 15. August 2018, 13:44

Mittwoch 15. August 2018, 15:26

Ok,
danke euch beide für eure Antworten und Zeit!
Antworten