¿Cómo extraigo los datos específicos de una url abierto en Python usando urllib2?

StackOverflow https://stackoverflow.com/questions/989872

  •  13-09-2019
  •  | 
  •  

Pregunta

Soy nuevo en Python y estoy jugando con la fabricación de un rastreador web muy básico. Por ejemplo, he hecho una simple función para cargar una página que muestra las puntuaciones más altas de un juego en línea. Así que estoy en condiciones de obtener el código fuente de la página HTML, pero necesito para dibujar números específicos de esa página. Por ejemplo, la página web es el siguiente:

http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13

donde 'bigdrizzle13' es la única parte del enlace. Los números de página que necesitan ser provocado y devuelto. En esencia, quiero construir un programa que todo lo que tendría que hacer es escribir en 'bigdrizzle13' y que podría generar esos números.

¿Fue útil?

Solución

Como otro cartel mencionado, BeautifulSoup es una herramienta maravillosa para este trabajo.

Aquí está todo el programa, comentó ostensiblemente. Se podría utilizar una gran cantidad de tolerancia de error, pero siempre y cuando se introduce un nombre de usuario válido, que se tire todos los resultados en la página web correspondiente.

He intentado hacer comentarios, así que pude. Si usted es fresco a BeautifulSoup, yo recomiendo trabajar a través de mi ejemplo, con la documentación de BeautifulSoup mano.

El programa entero ...

from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup
import sys

URL = "http://hiscore.runescape.com/hiscorepersonal.ws?user1=" + sys.argv[1]

# Grab page html, create BeatifulSoup object
html = urlopen(URL).read()
soup = BeautifulSoup(html)

# Grab the <table id="mini_player"> element
scores = soup.find('table', {'id':'mini_player'})

# Get a list of all the <tr>s in the table, skip the header row
rows = scores.findAll('tr')[1:]

# Helper function to return concatenation of all character data in an element
def parse_string(el):
   text = ''.join(el.findAll(text=True))
   return text.strip()

for row in rows:

   # Get all the text from the <td>s
   data = map(parse_string, row.findAll('td'))

   # Skip the first td, which is an image
   data = data[1:]

   # Do something with the data...
   print data

Y aquí es una prueba.

> test.py bigdrizzle13
[u'Overall', u'87,417', u'1,784', u'78,772,017']
[u'Attack', u'140,903', u'88', u'4,509,031']
[u'Defence', u'123,057', u'85', u'3,449,751']
[u'Strength', u'325,883', u'84', u'3,057,628']
[u'Hitpoints', u'245,982', u'85', u'3,571,420']
[u'Ranged', u'583,645', u'71', u'856,428']
[u'Prayer', u'227,853', u'62', u'357,847']
[u'Magic', u'368,201', u'75', u'1,264,042']
[u'Cooking', u'34,754', u'99', u'13,192,745']
[u'Woodcutting', u'50,080', u'93', u'7,751,265']
[u'Fletching', u'53,269', u'99', u'13,051,939']
[u'Fishing', u'5,195', u'99', u'14,512,569']
[u'Firemaking', u'46,398', u'88', u'4,677,933']
[u'Crafting', u'328,268', u'62', u'343,143']
[u'Smithing', u'39,898', u'77', u'1,561,493']
[u'Mining', u'31,584', u'85', u'3,331,051']
[u'Herblore', u'247,149', u'52', u'135,215']
[u'Agility', u'225,869', u'60', u'276,753']
[u'Thieving', u'292,638', u'56', u'193,037']
[u'Slayer', u'113,245', u'73', u'998,607']
[u'Farming', u'204,608', u'51', u'115,507']
[u'Runecraft', u'38,369', u'71', u'880,789']
[u'Hunter', u'384,920', u'53', u'139,030']
[u'Construction', u'232,379', u'52', u'125,708']
[u'Summoning', u'87,236', u'64', u'419,086']

Voila:)

Otros consejos

Puede utilizar Hermosa sopa para analizar el código HTML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top