urllib2를 사용하여 Python의 열린 URL에서 특정 데이터를 어떻게 작성합니까?

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

  •  13-09-2019
  •  | 
  •  

문제

나는 Python을 처음 접했고 매우 기본적인 웹 크롤러를 만들기 위해 놀고 있습니다. 예를 들어, 온라인 게임의 높은 점수를 보여주는 페이지를로드하기 위해 간단한 기능을 만들었습니다. 따라서 HTML 페이지의 소스 코드를 얻을 수 있지만 해당 페이지에서 특정 숫자를 그려야합니다. 예를 들어, 웹 페이지는 다음과 같습니다.

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

여기서 'bigdrizzle13'은 링크의 고유 한 부분입니다. 해당 페이지의 숫자를 작성하고 반환해야합니다. 본질적으로, 나는 'bigdrizzle13'에 입력하는 것뿐만 아니라 그 숫자를 출력 할 수있는 프로그램을 구축하고 싶습니다.

도움이 되었습니까?

해결책

다른 포스터가 언급했듯이 BeautifulSoup 이 직업을위한 훌륭한 도구입니다.

다음은 전체적으로 감시 된 프로그램입니다. 많은 오류 공차를 사용할 수 있지만 유효한 사용자 이름을 입력하는 한 해당 웹 페이지에서 모든 점수를 가져옵니다.

나는 할 수있는만큼 댓글을 달려고 노력했다. 당신이 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']

voila :)

다른 팁

당신이 사용할 수있는 아름다운 수프 HTML을 구문 분석합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top