2017-12-25 1 views
-2

Ich versuche, einige Daten zu kratzen und ich denke, dass ich die Lösung gefunden habe, aber ich habe Schwierigkeiten damit, den Code dafür zu schreiben.Benötigen Sie Hilfe beim Versuch, den len (item) als Index hinzuzufügen.

# This returns a list that changes depending on the page  
description = response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract() 

Ich brauche die genaue len (Beschreibung) zu erhalten und die Länge als Index zur Beschreibung hinzugefügt hat (nicht sicher, ob ich das Wort Index richtig bin mit)

So zum Beispiel

description = response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract() 

len(description) 

wenn die Länge der Beschreibung 4

ist der Code

zu sagen braucht

Hinweis: Ich brauche das '-' und ':' drin.

Ich werde durch mehrere Seiten kratzen, damit die Len sich ständig ändert. Ich gehe davon aus, dass ich dafür eine neue Funktion schreiben muss. Jede Hilfe wird geschätzt.

+1

Bitte geben Sie ein Beispiel für die Beschreibung und die gewünschte Ausgabe für diese Beschreibung, da es nicht klar ist, wie genau Sie verwenden werden len – Gnudiff

+0

Was auch immer ich war, würde das zur Indexbeschreibung verwenden. Ich laufe in einen Haken, wo, wenn ich die geschabten Daten als csv ausgab, die Zellen "Beschreibung" immer leer sind. wenn ich aber [-1:] als Index benutzte, würden die mit nur einer Liste in der Beschreibung erscheinen und der Rest würde nicht erscheinen. Ich hoffe, dass ich mit den exakten len alle Beschreibungen funktioniere. –

+0

immer noch ohne Beispiel unklar, was Sie eigentlich erreichen wollen. – Gnudiff

Antwort

-1

Verwenden Variable statt Konstante gibt:

So ersten Schritt extrahiert nur die len() Ihre Beschreibung und dass len zu einer Variablen speichern:

len_= int(response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract()) 

Dann überprüfen, indem Sie einfach if Bedingung:

if len(len_)==4: 

Wenn obige Bedingung erfüllt ist dann unter Code ausführen:

Zweiter Schritt nun diese Variable als index_no zum Schneiden verwenden:

description = response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract()[-len_:] 
+0

Ich sehe, was ich falsch gemacht habe. Ich habe versucht, len_ mit '[' + len_ + ':]' zu verketten. Wenn du Zeit hast, kannst du mir erklären, warum ich es nicht so verketten konnte? Wie auch immer, danke für Ihre Hilfe =) –

+0

@DanielAhn, wenn meine Lösung Ihnen geholfen hat [akzeptieren Sie die Antwort.] (Https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

@DanielAhn Sie erkennen, dass wenn Sie dies tun, Sie das gleiche Ergebnis erhalten, als einfach mit extract() ohne zusätzlichen Code? Wie die beiden anderen Antworten Ihnen sagen, x [-len (x):] == x – Gnudiff

0

Der Code

my_list[-len(my_list):] 

immer die ursprüngliche Liste zurückzukehren (eine Kopie, tatsächlich), da

my_list[-x:] 

bedeutet "die letzten x Elemente my_list", und du bist Einstellung x zu der Anzahl der Elemente in der Liste, so dass es alle von ihnen bekommt.

Zum Beispiel:

In [1]: my_list = [1, 2, 3, 4] 

In [2]: my_list[-len(my_list):] 
Out[2]: [1, 2, 3, 4] 

Insgesamt ist es nicht ganz klar, was Sie hier sind zu fragen. Könnten Sie Ihre Frage anders formulieren?

-1
# This returns a list that changes depending on the page  
description = response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract() 

die Länge

len(description) 

Angenommen Länge 4 zu finden.So tun, was Sie wieder tun, wird die gleiche Liste wieder

description = response.xpath('.//*[@class="txtGrey size14-description"]/text()').extract()[-4:] 

Hier ist ein Beispiel zurückkehren, um deutlich zu machen:

>>> a=[1,2,3,4,5,6,7,8,9] 
>>> print(a) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> len(a) 
9 
>>> a=a[-(len(a)):] 
>>> print(a) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> print(a[-9]) 
1 

Dies liegt daran, [-9] zeigt auf das Starten der Liste und [-9:] gibt daher den Anfang bis zum Ende der Liste oder die vollständige Liste erneut an.

Verwandte Themen