سؤال

ولدي جهازين لكل منهما، على حد علمي، تشغيل بيثون 2.5 و BeautifulSoup 3.1.0.1.

وأنا أحاول أن تتخلص http://utahcritseries.com/RawResults.aspx ، وذلك باستخدام :

from BeautifulSoup import BeautifulSoup
import urllib2

base_url = "http://www.utahcritseries.com/RawResults.aspx"

data=urllib2.urlopen(base_url)
soup=BeautifulSoup(data)
i = 0
table=soup.find("table",id='ctl00_ContentPlaceHolder1_gridEvents')
#table=soup.table
print "begin table"
for row in table.findAll('tr')[1:10]:
    i=i + 1
    col = row.findAll('td')
    date = col[0].string
    event = col[1].a.string
    confirmed = col[2].string
    print '%s - %s' % (date, event)
print "end table"
print "%s rows processed" % i

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

3/2/2002 - Rocky Mtn Raceway Criterium
None - Rocky Mtn Raceway Criterium
3/23/2002 - Rocky Mtn Raceway Criterium
None - Rocky Mtn Raceway Criterium
4/2/2002 - Rocky Mtn Raceway Criterium
None - Saltair Time Trial
4/9/2002 - Rocky Mtn Raceway Criterium
None - DMV Criterium
4/16/2002 - Rocky Mtn Raceway Criterium

وماذا أنا ألاحظ أنه عندما I

print row

وعلى آلة ويندوز، والبيانات آر يبدو بالضبط نفس مصدر HTML. ملاحظة علامة النمط على صف الجدول الثاني. وهنا صفين الأول:

<tr>
<td>
 3/2/2002
</td>
<td>
 <a href="Event.aspx?id=226">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=226">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

<tr style="color:#333333;background-color:#EFEFEF;">
<td>
 3/16/2002
</td>
<td>
 <a href="Event.aspx?id=227">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=227">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

في بلدي ماك عند طباعة الصفوف الأولى والثانية، تتم إزالة معلومات النمط من العلامة طن تبريد وانها انتقلت إلى كل حقل الدفتيريا. أنا لا أفهم لماذا يحدث هذا. انني اتلقى لا يوجد لكل قيمة التاريخ أخرى، لأن BeautifulSoup يضع علامة الخط حول كل تاريخ آخر. وهنا الناتج ماك:

<tr>
<td>
 3/2/2002
</td>
<td>
 <a href="Event.aspx?id=226">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=226">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

<tr bgcolor="#EFEFEF">
<td>
 <font color="#333333">
  3/16/2002
 </font>
</td>
<td>
 <font color="#333333">
  <a href="Event.aspx?id=227">
   Rocky Mtn Raceway Criterium
  </a>
 </font>
</td>
<td>
 <font color="#333333">
  Confirmed
 </font>
</td>
<td>
 <font color="#333333">
  <a href="Event.aspx?id=227">
   Points
  </a>
 </font>
</td>
<td>
 <font color="#333333">
  <a disabled="disabled">
   Results
  </a>
 </font>
</td>
</tr>

وبلدي النصي يتم عرض النتيجة الصحيحة تحت النوافذ، ماذا يجب أن أفعل من أجل الحصول على بلدي ماك للعمل بشكل صحيح؟

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

المحلول

وأظن أن المشكلة هي في الطلب urlib2، وليس BeautifulSoup:

ويمكن أن يساعد إذا تبين لنا نفس الجزء من البيانات الخام على النحو الذي عاد هذا الأمر على الجهازين:

urllib2.urlopen(base_url)

هذه الصفحة تبدو وكأنها قد تساعد: http://bytes.com/groups/python/635923- بناء متصفح مثل-جت-طلب

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

>>> import os
>>> os.uname() 
('Darwin', 'skom.local', '9.6.0', 'Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386', 'i386')

وأو الحصول على مايكروسوفت لاستخدام معايير الويب:)

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

نصائح أخرى

وهناك مشاكل موثقة مع الإصدار 3.1 من BeautifulSoup.

وقد ترغب في مضاعفة التحقق من هذا هو الإصدار الذي في الواقع تستخدم، وإذا خفض ذلك.

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