2016-08-26 4 views
1

analysiert werden Ich habe versucht, die Tabelle here mit Tabelle ID = "TblDataset2" analysieren und versuchen, auf die Zeilen in der Tabelle zugreifen, aber ich bekomme nur eine einzelne Zeile, wenn ich die Webseite mit beautifulsoup analysieren. Hier ist mein Code:Tabelle kann nicht mit BeautifulSoup

from bs4 import BeautifulSoup 
import requests 

URL = 'http://podaac.jpl.nasa.gov/ws/' 
dataset_ids = [] 
html = requests.get(URL + 'search/granule/index.html') 
soup = BeautifulSoup(html.text, 'html.parser') 

table = soup.find("table", {"id": "tblDataset2"}) 
rows = table.find_all('tr') 
rows.remove(rows[0]) 
print table 
for row in rows: 
    x = row.find_all('td') 
    dataset_ids.append(x[0].text.encode('utf-8')) 

print dataset_ids 

Ich möchte alle Zeilen der Tabelle zuzugreifen. Bitte hilf mir dabei. Vielen Dank.

Antwort

1

Dieses bestimmte Dataset wird vom Browser asynchron von einem anderen Endpunkt geladen, der eine JSON-Antwort zurückgibt. Machen Sie die Anfrage direkt an diesen Endpunkt:

import requests 

URL = 'http://podaac.jpl.nasa.gov/l2ssIngest/datasets' 
response = requests.get(URL) 
data = response.json() 

for item in data["datasets"]: 
    print(item["persistentId"], item["shortName"]) 

Drucke:

(u'PODAAC-AQR40-2SOCS', u'AQUARIUS_L2_SSS_V4') 
(u'PODAAC-QSX12-L2B01', u'QSCAT_LEVEL_2B_OWV_COMP_12') 
(u'PODAAC-ASOP2-12C01', u'ASCATA-L2-Coastal') 
(u'PODAAC-ASOP2-25X01', u'ASCATA-L2-25km') 
(u'PODAAC-ASOP2-25B01', u'ASCATB-L2-25km') 
(u'PODAAC-ASOP2-COB01', u'ASCATB-L2-Coastal') 
(u'PODAAC-J2ODR-GPS00', u'OSTM_L2_OST_OGDR_GPS') 
(u'PODAAC-OSCT2-L2BV2', u'OS2_OSCAT_LEVEL_2B_OWV_COMP_12_V2') 
(u'PODAAC-RSX12-L2B11', u'RSCAT_LEVEL_2B_OWV_COMP_12_V1.1') 
(u'PODAAC-AKASA-XOGD1', u'ALTIKA_SARAL_L2_OST_XOGDR') 
(u'PODAAC-GHAM2-2PR72', u'AMSR2-REMSS-L2P-v7.2') 
(u'PODAAC-GHVRS-2PN01', u'VIIRS_NPP-NAVO-L2P-v2.0') 
(u'PODAAC-RSX12-L2B12', u'RSCAT_LEVEL_2B_OWV_COMP_12_V1.2') 

Was den ersten Datensatz, benötigen Sie eine GET-Anfrage an den "Suche" Endpunkt zu machen:

from operator import itemgetter 

import requests 


URL = 'http://podaac.jpl.nasa.gov/dmasSolr/solr/dataset/select/' 
response = requests.get(URL, params={ 
    'q': '*:*', 
    'fl': 'Dataset-PersistentId,Dataset-ShortName-Full', 
    'rows': '2147483647', 
    'fq': 'DatasetPolicy-AccessType-Full:(OPEN OR PREVIEW OR SIMULATED OR REMOTE) AND DatasetPolicy-ViewOnline:Y', 
    'wt': 'json' 
}) 
data = response.json() 

for doc in sorted(data['response']['docs'], key=itemgetter('Dataset-ShortName-Full')): 
    print(doc['Dataset-PersistentId'], doc['Dataset-ShortName-Full']) 

Drucke:

(u'PODAAC-GHRAM-4FA01', u'ABOM-L4HRfnd-AUS-RAMSSA_09km') 
(u'PODAAC-GHGAM-4FA01', u'ABOM-L4LRfnd-GLOB-GAMSSA_28km') 
(u'PODAAC-AKASA-XOGD1', u'ALTIKA_SARAL_L2_OST_XOGDR') 
(u'PODAAC-USWCO-ALT01', u'ALT_TIDE_GAUGE_L4_OST_SLA_US_WEST_COAST') 
... 
(u'PODAAC-SASSX-L2WAF', u'WAF_DEALIASED_SASS_L2') 
(u'PODAAC-SMMRN-2WAF0', u'WENTZ_NIMBUS-7_SMMR_L2') 
(u'PODAAC-SASSX-L2SN0', u'WENTZ_SASS_SIGMA0_L2') 

Wenn Sie nicht vorgehen möchten, wie die Seite geladen und geformt wird, können Sie einen echten Browser verwenden, der von selenium automatisiert wird.

+0

Können Sie mir auch die URL mitteilen, um auf die Datasets der Tabellen-ID zuzugreifen: "tblDataset" der gleichen Seite. Vielen Dank. –

+0

@OmkarReddy sicher, diese ist ein wenig komplizierter als es eine Suchanfrage an http://podaac.jpl.nasa.gov/dmasSolr/solr/dataset/select/ Endpunkt mit mehreren GET-Parameter wäre. Lassen Sie mich sehen, ob ich Ihnen ein Muster zur Verfügung stellen kann. Übrigens, nur neugierig, wofür analysieren Sie diese Datensätze? Vielen Dank! – alecxe

+0

@OmkarReddy okay, aktualisiert mit einem Arbeitscode für den ersten Datensatz. – alecxe

Verwandte Themen