Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/10/2013, à 14:05

lanzrg

Scraper un site simple (sans AJAX) en python + download ?

Bonjour,

Je souhaite scraper le site de sublime text 3 afin de récupérer l'url de la dernière version stable.
Pour ensuite la télécharger. Tout ceci en Python évidemment.

Ce que j'ai et qui à l'air de fonctionner (n'hésitez pas à me dire que c'est à chier roll).

import lxml.etree
import lxml.html
import re

# HTML
site = "http://www.sublimetext.com/3"
html = lxml.html.parse(site)

# Ce que je voudrais avoir :
# Sublime Text 3 is currently in beta. The latest build is 3047.
# Helas j'ai une erreur.
elem = html.cssselect('.post > p:nth-child(2)')
print elem

# Ce que je voudrais avoir :
# 3047
# Je n'y suis pas encore.

# Reconstruire l'url pour le download.

# Et enfin telecharger le deb ou exe
# Je ne sais pas trop comment y parvenir.
# Particulierement sur la partie recuperation du filename.

J'ai une erreur lors de mon dernier print. A quoi est-ce du ?

AttributeError: 'lxml.etree._ElementTree' object has no attribute 'cssselect'

Merci d'avance

Dernière modification par lanzrg (Le 20/10/2013, à 14:16)

Hors ligne

#2 Le 20/10/2013, à 14:11

k3c

Re : Scraper un site simple (sans AJAX) en python + download ?

On peut voir ton code ?

Tu veux aller à
http://www.sublimetext.com/3

et ensuite tu veux le build 3033 ou 3047 ou ... ?


Archlinux sur Xiaomi Air 13

Hors ligne

#3 Le 20/10/2013, à 16:49

grim7reaper

Re : Scraper un site simple (sans AJAX) en python + download ?

Salut,

Ton problème c’est que tu oublies de faire un getroot sur ta page HTML parsée pour avoir l’élément root sur lequel appliquer ton sélecteur CSS.

Voilà un rapide script d’exemple (attention, aucune gestion d’erreur et je pars sur le principe que tu veux télécharger la version Ubuntu 64-bit) :

#!/usr/bin/env python3

from re import search
from urllib.request import urlretrieve
from lxml.html import parse

# Website address.
URL = 'http://www.sublimetext.com/3'
# For Ubuntu 64-bit
DL_PATTERN = 'http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_XXX_x64.tar.bz2'

# Retrieve the page.
page = parse(URL).getroot()
# Extract the build information.
build_info = page.cssselect('.post > p:nth-child(2)')[0].text
# Extract latest build number.
matches = search(r'(\d+)\.$', build_info)
version = matches.group(1)
# Build the download URL.
dl_url = DL_PATTERN.replace('XXX', version)
# Download the file.
urlretrieve(dl_url, 'SublimeText3.tar.bz2')

Hors ligne