Wie zeichne ich bestimmte Daten von einer geöffneten URL in Python mit urllib2 aus?

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

  •  13-09-2019
  •  | 
  •  

Frage

Ich bin neu in Python und spiele mit einem sehr einfachen Web -Crawler herum. Zum Beispiel habe ich eine einfache Funktion zum Laden einer Seite gemacht, auf der die hohen Ergebnisse für ein Online -Spiel angezeigt werden. Daher kann ich den Quellcode der HTML -Seite erhalten, aber ich muss bestimmte Zahlen von dieser Seite zeichnen. Zum Beispiel sieht die Webseite so aus:

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

Wo 'Bigdizzle13' der einzigartige Teil des Links ist. Die Zahlen auf dieser Seite müssen herausgezogen und zurückgegeben werden. Im Wesentlichen möchte ich ein Programm erstellen, das ich nur tun müsste, ist 'Bigdizzle13' einzugeben und es könnte diese Zahlen ausgeben.

War es hilfreich?

Lösung

Wie ein anderes Plakat erwähnte, Schöne Gruppe ist ein wunderbares Werkzeug für diesen Job.

Hier ist das gesamte, prächtige Programm. Es könnte eine Menge Fehlertoleranz verwenden, aber solange Sie einen gültigen Benutzernamen eingeben, wird alle Punktzahlen von der entsprechenden Webseite gezogen.

Ich habe versucht, so gut ich konnte. Wenn Sie frisch für BeautifulSoup sind, empfehle ich dringend, mein Beispiel mit dem zu arbeiten Schöne Dokumentation praktisch.

Das ganze Programm ...

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

Und hier ist ein Testlauf.

> 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 :)

Andere Tipps

Sie können verwenden Schöne Suppe Um die HTML zu analysieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top