urllib2を使用して、Pythonで開いたURLから特定のデータを引き出すにはどうすればよいですか?
質問
私はPythonに慣れていないので、非常に基本的なWeb Crawlerを作ることで遊んでいます。たとえば、オンラインゲームの高いスコアを表示するページを読み込むための簡単な関数を作成しました。そのため、HTMLページのソースコードを取得できますが、そのページから特定の番号を描画する必要があります。たとえば、Webページは次のようになります。
http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13
ここで、「BigDrizzle13」はリンクのユニークな部分です。そのページの番号を引き出して返す必要があります。基本的に、私がしなければならないことは、「BigDrizzle13」を入力し、それらの数値を出力できるプログラムを構築したいと思います。
解決
別のポスターが言及したように、 BeautifulSoup この仕事のための素晴らしいツールです。
これが、誤って相互作用されたプログラム全体です。多くのエラートレランスを使用する可能性がありますが、有効なユーザー名を入力する限り、対応するWebページからすべてのスコアをプルします。
できる限りコメントしようとしました。あなたがBeautifulSoupから新鮮な場合は、私の例を使用して作業することを強くお勧めします BeautifulSoupドキュメント ハンディ。
プログラム全体...
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
そして、これがテストの実行です。
> 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']
出来上がり:)
他のヒント
使用できます 美しいスープ HTMLを解析します。
所属していません StackOverflow