Stop guessing what′s working and start seeing it for yourself.
Acceder o registrarse
Q&A
Question Center →

Un tutoriel de Semalt: Web Scraping en Python

J'ai récemment visité KinoPoisk (version russe d'IMDB) et j'ai découvert que années, j'ai réussi à évaluer plus de 1000 films. Je pensais qu'il serait intéressant de rechercher ces données plus détaillées: mon film a-t-il changé de goût au fil du temps? Pendant quelles saisons de l'année est-ce que je regarde plus de films?

Mais avant d'analyser et de créer de superbes graphismes, nous devons obtenir les données. Malheureusement, de nombreux services n'ont pas d'API publique, vous devez donc retrousser vos manches et analyser les pages html.

Cet article est destiné à ceux qui ont toujours voulu apprendre à utiliser le Web Scrapping mais qui ne l'ont pas appris ou ne savaient pas par où commencer.

Tâche

Notre tâche consiste à extraire les données sur les films déjà vus: le titre du film, la date et l'heure de visionnage, la note de l'utilisateur.

En fait, notre travail va se faire en 2 étapes:

Etape 1: télécharger et sauvegarder des pages html

Etape 2: analyser html dans un format adapté à analyse plus poussée (csv, json, pandas dataframe etc.)

Instruments

Il y a beaucoup de bibliothèques python pour envoyer des requêtes http. Le plus célèbre et très pratique est Requêtes.

Il est également nécessaire de choisir une bibliothèque pour l'analyse HTML.

BeatifulSoup, lxml

Ce sont les deux bibliothèques les plus populaires pour l'analyse syntaxique html et en choisissant l'un d'eux est juste une préférence personnelle. De plus, ces bibliothèques sont étroitement connectées entre elles: BeautifulSoup a commencé à utiliser lxml comme un analyseur interne pour l'accélération, et dans lxml, un module de soupparser a été ajouté. Pour comparer les approches, je vais analyser les données avec BeautifulSoup et utiliser des sélecteurs XPath dans le module lxml.html.

Téléchargement de données

Commençons à télécharger des données. Tout d'abord, essayons d'obtenir la page par url et de l'enregistrer dans un fichier local.

Nous ouvrons le fichier résultant et voyons que ce n'est pas si simple: le site nous a considéré comme un robot et ne montrera pas les données.

Voyons comment fonctionne le site

Le navigateur n'a aucun problème pour obtenir des informations sur le site. Voyons comment exactement il envoie la demande. Pour ce faire, nous utilisons le panneau "Réseau" dans les "Outils de développement" dans le navigateur (j'utilise Firebug pour cela), généralement, la requête dont nous avons besoin est la plus longue.

Comme nous pouvons le voir, le navigateur envoie aussi aux en-têtes UserAgent, cookie et un autre nombre de paramètres. Tout d'abord, nous allons essayer d'envoyer UserAgent correct à un en-tête.

Cette fois nous avons du succès, et maintenant on nous donne les données nécessaires. Il est à noter que parfois le site vérifie également la validité des cookies, auquel cas les sessions de la bibliothèque Demandes peuvent vous aider.

Télécharger tous les prix

Maintenant, nous sommes en mesure d'enregistrer une page avec des taux. Mais généralement, l'utilisateur a beaucoup de taux, et il est nécessaire de parcourir toutes les pages. Le numéro de page qui nous intéresse est facile à transférer directement à l'URL.

Collecte de données à partir de Html

Passons maintenant directement à la collecte des données à partir de html. La manière la plus simple de comprendre comment la page html est structurée est d'utiliser la fonction "Inspecter l'élément" dans le navigateur. Dans ce cas, tout est assez simple: la table entière avec les taux est dans l'étiquette. Sélectionnez ce noeud:

à partir de bs4 import BeautifulSoup

à partir de lxml import html

# Beautiful Soup

soupe = BeautifulSoup (texte)

) film_list = soup.find ('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring (texte)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']') [0]

Apprenons à retirer le titre russe du film et un lien à la page du film (aussi comment obtenir le texte et la valeur de l'attribut)

Si vous avez besoin d'extraire le titre en anglais, changez simplement "nameRus" en "nameEng"

Résultats

Nous avons appris à analyser des sites Web, nous nous sommes familiarisés avec les bibliothèques Requêtes, BeautifulSoup et lxml, ainsi que les données reçues pour analyser plus avant les films déjà visionnés sur KinoPoisk.

Post a comment

Post Your Comment

Skype

semaltcompany

WhatsApp

16468937756

Telegram

Semaltsupport