2017-09-06 1 views
0

Ich bin interessiert an Datenanalyse von here. Aber anders als die Standardseite kann ich parse entweder die older oder newer Daten nicht, da es keine Änderung in url Adresse gibt. Wie gehe ich vor, um andere Daten als die auf der Standardseite zu erhalten? Ich habe lange versucht, eine Lösung zu finden, würde wirklich jede Hilfe zu schätzen wissen. Ich verwende python 3.6 mit lxml und requests für urlsDaten analysieren, wenn sich die URL nicht ändert (Paginierung)

+0

Blick auf die Chromkonsole unter dem 'Netz 'Tab und klicken Sie auf' older' oder 'newer' und beobachten, welche Anforderungen gestellt werden. Es könnte helfen? – Acidic

+1

Immer, wenn Sie auf Neu klicken, heißt diese URL. Ändern Sie rowId jedes Mal, wenn Sie neue Daten benötigen. https://markets.ft.com/data/world/ajax/getnextecoevents?rowId=79501&scrollForward=true&filter=%7B% 22Keyword% 22% 3A% 22% 22% 2C% 22Schwäche% 22% 3A% 22% 22% 2C% 22Länder% 22% 3A% 5B% 5D% 7D – MMRahman

Antwort

2

Wie die Website funktioniert:

Wenn die Seite geladen wird, ist es mit den aktuellen Daten innerhalb des HTML lädt. Jedes Mal, wenn older oder newer in der Paginierung klicken, macht es eine GET Anforderung an diese url:

https://markets.ft.com/data/world/ajax/getnextecoevents?rowId=79519&scrollForward=true&filter=%7B%22keyword%22%3A%22%22%2C%22impact%22%3A%22%22%2C%22countries%22%3A%5B%5D%7D` 

Beachten Sie die URL-Parameter:

rowId, scrollForward, filter 

Lösung:

Gestalte individuelle Anfragen zu der obigen URL, aber dekrementieren oder inkrementieren Sie einfach den Parameter rowId, um durch die Seiten zu blättern.

Zum Beispiel:

GET https://markets.ft.com/data/world/ajax/getnextecoevents?rowId=79519 
GET https://markets.ft.com/data/world/ajax/getnextecoevents?rowId=79520 
GET https://markets.ft.com/data/world/ajax/getnextecoevents?rowId=79521 
+0

großartig! Danke vielmals. Kannst du mir mitteilen, wo genau du diese Adresse gefunden hast? Ich habe einen Blick unter den Netzwerk-Tab (unter inspect Elemente), aber ich kann es nicht finden –

+0

Ja sicher. Beobachten Sie den Netzwerk-Tab und drücken Sie 'älter' oder' neuer', um die GET-Anfrage auszulösen. Es sollte unter dem 'XHR' Filter erscheinen (oder einfach' All' filtern). – Acidic

+0

hab es geschafft! Danke –

2

Basierend Parsen auf die Entwickler-Tools Netzwerkanforderungen anzeigen, können Sie sehen, dass, wenn Sie ein neues Datum auf der Standardseite auswählen, wird die folgende GET-Anfrage gemacht:

Basis-URL:

https://markets.ft.com/data/world/ajax/getnextecoevents? 

Abfrageparameter (Sie werden den Filter dict müssen urlencode)

startDate=2017-09-04&filter={"keyword":"","impact":"","countries":[]} 

Stellen Sie einfach eine Anfrage für das von Ihnen benötigte Datum und verwenden Sie urllib, um die verbleibenden Filterparameter zu codieren. Dies sollte dir helfen, was du brauchst.

Verwandte Themen