كيف يمكنني سحب بيانات محددة من عنوان URL المفتوح في Python باستخدام Urllib2؟

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

  •  13-09-2019
  •  | 
  •  

سؤال

أنا جديد في بيثون وألعب مع صنع مجنزرة ويب أساسية للغاية. على سبيل المثال، قمت بإجراء وظيفة بسيطة لتحميل صفحة تظهر الدرجات العالية للحصول على لعبة عبر الإنترنت. لذلك أنا قادر على الحصول على شفرة المصدر في صفحة HTML، لكنني بحاجة إلى رسم أرقام محددة من تلك الصفحة. على سبيل المثال، تبدو صفحة الويب مثل هذا:

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

حيث "bigdrizzle13" هو الجزء الفريد من الرابط. يجب استخلاص الأرقام الموجودة في تلك الصفحة وعادتها. في الأساس، أرغب في بناء برنامج أن كل ما يجب علي فعله هو كتابة "bigdrizzle13" ويمكن أن يخرج هذه الأرقام.

هل كانت مفيدة؟

المحلول

كما ذكر ملصق آخر، جميلة هي أداة رائعة لهذه الوظيفة.

إليك البرنامج بأكمله. يمكن أن يستخدم الكثير من التسامح مع الخطأ، ولكن طالما قمت بإدخال اسم مستخدم صالح، فسوف يسحب جميع الدرجات من صفحة الويب المقابلة.

حاولت التعليق وكذلك أستطيع. إذا كنت جديدا إلى جمهورية جميلة، أوصي بشدة بالعمل من خلال مثالي مع وثائق الجميلات مفيد.

البرنامج بأكمله ...

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top