web-dev-qa-db-fra.com

Comment obtenir un fichier HTML en utilisant Python?

Je ne connais pas très bien Python. J'essaie d'extraire les noms d'artiste (pour commencer :)) de la page suivante: http://www.infolanka.com/miyuru_gee/art/art.html

Comment récupérer la page? Mes deux préoccupations principales sont: Quelles fonctions utiliser et comment filtrer les liens inutiles de la page?

15
nakiya

Exemple utilisant urlib et lxml.html:

import urllib
from lxml import html

url = "http://www.infolanka.com/miyuru_gee/art/art.html"
page = html.fromstring(urllib.urlopen(url).read())

for link in page.xpath("//a"):
    print "Name", link.text, "URL", link.get("href")

output >>
    [('Aathma Liyanage', 'athma.html'),
     ('Abewardhana Balasuriya', 'abewardhana.html'),
     ('Aelian Thilakeratne', 'aelian_thi.html'),
     ('Ahamed Mohideen', 'ahamed.html'),
    ]
20
Vince Spicer

Je pense que "eyquem" serait mon choix aussi, mais j'aime bien utiliser httplib2 au lieu de urllib . urllib2 est une librairie de niveau trop bas pour ce travail .

import httplib2, re
pat = re.compile('<DT><a href="[^"]+">(.+?)</a>') http = httplib2.Http() headers, body = http.request("http://www.infolanka.com/miyuru_gee/art/art.html")
li = pat.findall(body) print li

7
Miere

Vérifiez ceci mon ami

import urllib.request

import re

pat = re.compile('<DT><a href="[^"]+">(.+?)</a>')

url = 'http://www.infolanka.com/miyuru_gee/art/art.html'

sock = urllib.request.urlopen(url).read().decode("utf-8")

li = pat.findall(sock)

print(li)
6
pulsedia
  1. Utilisez urllib2 pour obtenir la page.

  2. Utilisez BeautifulSoup pour analyser le code HTML (la page) et obtenir ce que vous voulez!

6
user225312

Ou aller tout droit:

import urllib

import re
pat = re.compile('<DT><a href="[^"]+">(.+?)</a>')

url = 'http://www.infolanka.com/miyuru_gee/art/art.html'
sock = urllib.urlopen(url)
li = pat.findall(sock.read())
sock.close()

print li
4
eyquem

Et respect robots.txt et étranglez vos requêtes :)

(Apparemment, urllib2 fait déjà cela utile SO post ).

1
Tim Barrass