我正在尝试在下面的网址中打印所有网球运动员。但是分割功能只打印一个玩家名称,尽管其他玩家的名字可以从以下分割功能名称中检索出来。{1'">')[1] .split(&# 39;
import time
import urllib2
from urllib2 import urlopen
import datetime
def Tennis():
try:
australianOpen = urllib2.urlopen('http://www.ausopen.com/en_AU/players/profiles.html').read()
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]
for Eachnames in names1 :
Eachnames = names1.split('">')[1].split('</a><a href="')[0]
print Eachnames
except Exception,e:
print str(e)
Tennis()
答案 0 :(得分:0)
只需添加names1 = names1 [names1.find(Eachnames)+ len(每个名字):]
def Tennis():
try:
australianOpen = urllib2.urlopen('http://www.ausopen.com/en_AU/players/profiles.html').read()
#print australianOpen
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]
for Eachnames in names1 :
Eachnames = names1.split('">')[1].split('</a><a href="')[0]
names1 = names1[names1.find(Eachnames)+len(Eachnames):]
if Eachnames.find('<')!= -1:
Eachnames=Eachnames[:Eachnames.find('<')]
print Eachnames
except Exception,e:
print str(e)
Tennis()
答案 1 :(得分:0)
问题与行Eachnames = names1.split('">')[1].split('</a><a href="')[0]
有关,你在这里做的是将字符串拆分为子串数组,然后使用[1]选择1:st元素。由于您在找到名字后没有修改变量names1
,因此您将反复选择相同的名称。一个简单的修改是
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()
但是打印输出会出错,因为你的搜索标准都是错误的(除非你想要像半URL adressen et.c.这样的乱码)。我认为一个好的简单的解决方案是使用正则表达式。 一个简单的正则表达式来捕捉名称,没有特殊字符左右是
the_names = re.findall("\">([A-Za-z]*, [A-Za-z]*)", names1)
使用regexp的简化程序是
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()
希望这有帮助