J'essaie d'apprendre le grattage Web en utilisant Python par moi-même dans le cadre d'un effort pour apprendre l'analyse des données. J'essaie de gratter la page Web imdb dont l'URL est la suivante: http://www.imdb.com/search/title?sort=num_votes,desc&start=1&title_type=feature&year=1950,2012
J'utilise le module BeautifulSoup. Voici le code que j'utilise:
r = requests.get(url) # where url is the above url
bs = BeautifulSoup(r.text)
for movie in bs.findAll('td','title'):
title = movie.find('a').contents[0]
genres = movie.find('span','genre').findAll('a')
genres = [g.contents[0] for g in genres]
runtime = movie.find('span','runtime').contents[0]
year = movie.find('span','year_type').contents[0]
print title, genres,runtime, rating, year
J'obtiens les sorties suivantes:
The Shawshank Redemption [u'Crime', u'Drama'] 142 mins. (1994)
En utilisant ce code, je pouvais gratter le titre, le genre, la durée d'exécution et l'année, mais je ne pouvais pas gratter l'ID du film imdb, ni la note. Après avoir inspecté les éléments (dans le navigateur Chrome), je ne suis pas en mesure de trouver un modèle qui me permettra d'utiliser un code similaire à celui ci-dessus.
Quelqu'un peut-il m'aider à écrire le morceau de code qui me permettra de gratter l'identifiant et les notes du film?
la source
rating
n'est pas défini. Si vous corrigez cela, vous pouvez également ajouterfrom BeautifulSoup import BeautifulSoup
etimport requests
. Et pourquoi ne pas montrer aussiurl="http://etc"
pour que nous n'ayons pas à le faire pour nous-mêmes?Réponses:
Au lieu de gratter, vous pouvez essayer d'obtenir les données directement ici: http://www.imdb.com/interfaces . Il semble qu'ils aient des données disponibles via ftp pour les films, les acteurs, etc.
la source
J'ai pu trouver une solution. J'ai pensé à poster juste au cas où cela aiderait quelqu'un ou si quelqu'un veut suggérer quelque chose de différent.
La sortie ressemble à ceci:
la source
Vous pouvez tout obtenir de div avec class = "rating rating-list"
Tout ce que vous avez à faire est de récupérer l'attribut id: [id = "tt1345836 | imdb | 8.5 | 8.5 | advsearch"] Lorsque vous avez ce contenu, vous divisez cette chaîne par '|', et vous obtenez: 1. paramètre: id film 3. paramètre: score du film
la source
En guise de rétroaction générale, je pense que vous feriez bien d'améliorer votre format de sortie. Le problème avec le format tel qu'il se présente est qu'il n'y a pas de moyen transparent d'obtenir les données par programme. Pensez plutôt à essayer:
La bonne chose à propos d'un fichier délimité par des tabulations est que si vous finissez par le faire évoluer, il peut facilement être lu dans quelque chose comme impala (ou à des échelles plus petites, de simples tables mySql). De plus, vous pouvez ensuite lire par programmation les données en python en utilisant:
Le deuxième conseil, c'est que je suggérerais d'obtenir plus d'informations que vous ne pensez en avoir besoin lors de votre premier contact. L'espace disque est moins cher que le temps de traitement, donc relancer le racloir à chaque fois que vous développez votre analyse ne sera pas amusant.
la source