2016-03-29 6 views
0
import collections.OrderedDict 
    import requests 
    from bs4 import BeautifulSoup 
    r = requests.get('https://www.youtube.com/playlist?list=PLIeGtxpvyG-JI5RDHtjk0NtyQPirBfBpu') 
    r.status_code 
    if r.status_code == 200 : 
     soup = BeautifulSoup (r.text,'html.parser') 

    OrderedDict.dict = {} 
    for i in soup.findAll('td',{'class':'pl-video-title'}): 
     #print i 
     dict [i.find('a').text] = i.findAll('td' , { 'class': "pl-video-time"})[0].text 

for i,k in collections.OrderedDict.dict.items(): 
    print i, k 

Ich konnte das Programm erfolgreich ausführen, aber ich möchte die gleiche Reihenfolge beibehalten. Ich möchte wissen, wie man 'OrderedDict' Modul in meinem Fall verwendet. Wenn ich 'OrderedDict' Modul benutze bekomme ich einen Fehler.Deaktivieren Sie das Wörterbuch standardmäßig automatisch

+1

Erstens, was ist dein Fehler? Könnten Sie das und die vollständige Rückverfolgung einschließen? Zweitens importiert 'import collections.OrderedDict' nicht das' OrderedDict'. Es ist kein Modul, sondern eine Klasse im Modul "Collections". Stattdessen importieren Sie aus Sammlungen OrderedDict. Um ein 'OrderedDict' zu erstellen, verwenden Sie' my_od = OrderedDict() '. –

Antwort

1
from collections import OrderedDict 
import requests 
from bs4 import BeautifulSoup 

r = requests.get('https://www.youtube.com/playlist?list=PLIeGtxpvyG-JI5RDHtjk0NtyQPirBfBpu') 

if r.status_code == 200: 
    soup = BeautifulSoup(r.text, 'html.parser') 

    d = OrderedDict() 
    for i in soup.findAll('td', {'class': 'pl-video-title'}): 
     d[i.find('a').text] = i.findAll('td', {'class': "pl-video-time"})[0].text 

    for i, k in d.items(): 
     print i, k 

Zunächst würde Alles, Sie müssen OrderedDict aus dem Coll importieren E-Modul.

Ich habe den baumelnden r.status_code entfernt, weil er nichts tut, und dann alles in den if r.status_code == 200 setzen, sonst würdest du eine NameError-Ausnahme bekommen, ich hätte auch dict in d geändert, da du es hättest diese Variable überschatten, außerdem habe ich die Formatierung etwas korrigiert.

0

eine OrderedDict Sie

myOrderedDict = OrderedDict([]) 

nicht

OrderedDict.dict = {} 

und iteriert durch die geordnete tun müssen zu instanziiert dict es

for i,j in in myOrderedDict.items(): 
    #do something with i and j 
+1

Sein Import ist durcheinander, also sollten Sie das in Ihre Antwort aufnehmen. –

+0

Wenn er dict "überschreiben" will, dann sollte er dict = OrderedDict schreiben. Wenn nicht, sollte er nicht schreiben dict = OrderedDict() entweder – Schore

+0

ah richtig, repariert es, danke! –

Verwandte Themen