2010-02-03 6 views
1

이것이 기본이라는 것을 알고 있습니다.이 목록에서 playAudio 호출에 인수를 가져 오는 우아한 방법은 무엇입니까

나는 우아한 방법이 무엇인지 궁금 할뿐입니다. 예를 들어

:

나는이 (가) 'python01.wav'이 목록

목록에서 '평 * 톤'문자열을 원하는는 다음과 같이이다 :

[ 
[('name', 'entry')], 
[('class', 'entry')], 
[('type', 'text/javascript'), ('src', '/term_added.php?hw=python')], 
[('type', 'text/javascript')], 
[('class', 'headword')], 
[('class', 'hw')], 
[], 
[('class', 'pr')], 
[('class', 'unicode')], 
[('class', 'unicode')], 
[('class', 'unicode')], 
[('class', 'unicode')], 
[], 
[('href', '#'), ('onclick', "playAudio('python01.wav', 'py*thon'); return false;"), ('class', 'audio_link'), ('target', '_blank')], 
[('src', '/images/audio.gif'), ('alt', 'Listen to audio'), ('title', 'Listen to audio')], 
[], 
[('class', 'fl')], 
[], 
[('class', 'in')], 
[('class', 'il')], 
[('class', 'if')], 
[], 
[('class', 'def')], 
[('class', 'gram')], 
[], 
] 

이 주셔서 감사합니다 당신의 도움!

답변

2
아마도

하지 최대의 솔루션,하지만 당신이 원하는 것을 할 나타납니다

l = [huge list from your example] 
for e in l: # for each list 
    for t in e: # for each tuple 
     for s in t: # each string 
      if 'playAudio' in s: 
       args = s[9:].split(',') #skip 'playAudio' split on comma 
       print "%s,%s" % (args[0].strip('('), 
           args[1].lstrip(" ")[0:args[1].find(')')] 

난 당신이 운동을 '최적화'둡니다. 이 데이터의 출처와 그것이 가지고있는 특성 (playAudio는 HREF 속성을 가진 것에 만 연결될 수 있습니까?)을 설명 할 수 있다면 더 나은 솔루션을 제공 할 수 있습니다.

편집 :

은 개인적으로 특정 예를 들어, 내가 이런 짓을 했을까 :

from BeautifulSoup import BeautifulSoup, SoupStrainer 
import re 
import urllib2 

doc = urllib2.urlopen("http://www.learnersdictionary.com/search/python").read() 
doc = doc.replace('</SCR', '') 
audioLinks = SoupStrainer('a', onclick=re.compile(r'^playAudio')) 
soup = [str(elm) for elm in BeautifulSoup(doc, parseOnlyThese=audio)] 
for elm in soup: 
    print re.search(r'playAudio\((.*[^)])\)', elm).group(1) 
    # prints 'python01.wav', 'py*thon' 
+1

고마워요. 이것은 http://www.learnersdictionary.com/search/python에서 온 것입니다. 나는 영어를 배우고 있습니다. 그래서 단어 발음하는 법을 듣고 싶습니다. – zjk

+0

이 데이터는 HTMLParser에서 가져옵니다. 그것은 파이썬의 lib 디렉토리에 있습니다. – zjk

1
return ('python01.wav', 'py*thon') 

이것은 귀하의 사양을 완벽하게 충족시킵니다.

그러나 내가 추측해야만한다면, 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다.

그렇다면 우리가 실제로 원하는 문자열을 파악할 수있는 충분한 정보를 제공하지 않는 이유는 무엇입니까? 문자열 중 하나에서 작은 따옴표 사이의 모든 것입니까? p,y,t,h,o,n의 순서로 된 작은 따옴표 사이의 모든 내용은 무엇입니까? playAudio의 인수는 무엇입니까?

원하는 것을 알지 못하면 문제를 해결할 수있는 해결책을 제시 할 수 없습니다.

+0

죄송합니다. 나는 연극에 대한 논쟁을 의미합니다 .Audio call – zjk

관련 문제