<p>这个问题与行<code>Eachnames = names1.split('">')[1].split('</a><a href="')[0]</code>有关,您在这里所做的是将字符串拆分为子字符串数组,然后使用[1]选择1:st元素。由于在找到第一个名称后没有修改变量<code>names1</code>,因此将反复选择相同的名称。一个简单的修改是</p>
<pre><code>import time
import urllib
import urllib.request
import datetime
def Tennis():
try:
australianOpen = urllib.request.urlopen('http://www.ausopen.com/en_AU/players/profiles.html').read().decode('utf-8')
names1 =australianOpen.split('</div><div id="section_A" class="sectionHeading"><div class="men">A</div><div class="women">A</div></div><div class="section"><div class="men">')[1].split('</a></div></div></div></div>')[0]
the_names = names1.split('">')
for name in the_names:
print (name.split('</a><a href="'))
except Exception:
print ("Exception", sys.exc_info()[0])
Tennis()
</code></pre>
<p>但是打印输出会出错,因为您的搜索标准都是错误的(除非您想要jibberish,比如half URL adressen et.c.)。我认为一个好的简单的解决方案是使用正则表达式。
一个简单的regexp来捕获名称,不需要特殊字符</p>
<pre><code>the_names = re.findall("\">([A-Za-z]*, [A-Za-z]*)", names1)
</code></pre>
<p>一个使用regexp的稍微简化的程序是</p>
<pre><code>import urllib.request
import re
def Tennis():
try:
australianOpen = urllib.request.urlopen('http://www.ausopen.com/en_AU/players/profiles.html').read().decode('utf-8')
names1 =australianOpen.split('</div><div id="section_A" class="sectionHeading"><div class="men">A</div><div class="women">A</div></div><div class="section"><div class="men">')[1].split('</a></div></div></div></div>')[0]
except Exception:
print ("Exception")
the_names = re.findall("\">([A-Za-z]*, [A-Za-z]*)", names1)
for name in the_names:
print (name)
Tennis()
</code></pre>
<p>希望这有帮助</p>