2017-02-11 4 views
1

Je travaille sur des informations sur certaines des vidéos tendances les plus récentes ici https://www.youtube.com/feed/trending. J'ai chargé la page dans BeautifulSoup mais j'ai une erreur en essayant de parcourir la liste des divs que j'ai besoin d'analyser.BeautifulSoup: Liste des liens href embarqués

import urllib2 
from bs4 import BeautifulSoup 

url = 'https://www.youtube.com/feed/trending' 
page = urllib2.urlopen(url) 
soup = BeautifulSoup(page,'html.parser') 

#narrow in to divs with relevant meta-data 
videos = soup.find_all('div',class_='yt-lockup-content') 
videos[50].div.a['href'] #checking one specific DIV 
>>u'user/nameofchannel' #works 

Jusqu'à présent j'ai informations retournées j'ai besoin, mais lorsque je tente de courir à travers tous les divs (70+ sur cette page d'écriture), je reçois une erreur liée au type de données cette méthode renvoie .

for v in videos: 
    videos[v].div.a['href'] 
>> TypeError: list indices must be integers, not Tag 

Comment puis-je courir à travers la liste des DIV retournée dans « vidéos » et imprimer une liste de valeurs qui correspondent à « vidéo [n] .div.a [ » href ']?

Répondre

1
for v in range(len(videos)): 
    videos[v].div.a['href'] 

ce que vous avez besoin est l'indice de videos liste, pas l'étiquette en elle.

Mieux:

for index, value in enumerate(videos): 
    videos[index].div.a['href'] 

beaucoup mieux:

[v.div.a['href'] for v in videos] 

utilisation compréhension de la liste est recommandée pour ce genre de tâche

+0

Merci! Le format de compréhension de liste a fonctionné mais le premier n'a pas fait. Erreur: "TypeError: l'objet 'int' n'est pas itérable" – James