使用相同的代码解析多个字符串

时间:2015-01-08 12:58:56

标签: python parsing

我正在尝试在下面的网址中打印所有网球运动员。但是分割功能只打印一个玩家名称,尽管其他玩家的名字可以从以下分割功能名称中检索出来。{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()

2 个答案:

答案 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()

希望这有帮助