Python CGI Script (с использованием XML и mindom) не печатает счетчик цикла FOR - PullRequest
2 голосов
/ 18 июля 2011

Пытаясь напечатать результаты поиска Yahoo с помощью API, счетчик цикла For не будет печатать увеличенное значение. XML анализируется и печатается, но счетчик печатает «1» снова и снова.

Тот же код отлично работает для Bing API.

for counter1 in range(50):
    try:
        for Result in YahooSearchResultsXML.getElementsByTagName('Result'):
            try:
                Yahoo_PageTitle = Result.getElementsByTagName('Title')[counter1].firstChild.toxml(encoding="utf-8")
            except AttributeError:
                Yahoo_PageTitle = "Sorry, no page title provided..." 
            try:
                Yahoo_PageDesc = Result.getElementsByTagName('Summary')[counter1].firstChild.toxml(encoding="utf-8")
            except AttributeError:
                Yahoo_PageDesc = "Sorry, no page description provided..."
            Yahoo_DisplayURL = Result.getElementsByTagName('DisplayUrl')[counter1].firstChild.toxml(encoding="utf-8")
            Yahoo_URL = Result.getElementsByTagName('ClickUrl')[counter1].firstChild.toxml(encoding="utf-8")
            ##  Print the output to ensure it's working.
            print counter1+1
            print "<br />"
            print "<h2>" + Yahoo_PageTitle + "</h2>"
            print Yahoo_PageDesc + "<br />"
            print Yahoo_DisplayURL + "<br />"
            print Yahoo_URL + "<br />"
            print "<p> ----------------------------------------------------------------------------------------------------------------- </p>"
    except IndexError:
        print "Exiting@IndexError handler"
        break
    Yahoo_Score = counter1 + 1

Предложения приветствуются, я слишком долго смотрел на этот код.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Вы уверены, что у вас есть более 1 Title / Summary / DisplayUrl / ClickUrl в каждом Result?Когда значение counter достигает 1, если в XML нет второго элемента Title / etc, вы перейдете к обработчику IndexError и выйдете из цикла.

0 голосов
/ 18 июля 2011

Как написано выше, печать выполняется в цикле for Result in...Если у вас есть несколько результатов, вы получите несколько строк с одинаковым содержимым.

Кроме того, try не должен иметь отступ? (это было исправлено)

Редактировать: из информации, которую мы собрали, вам нужно увеличить этот счетчик во внутреннем цикле.То, как вы это написали (for counter1 in range(50)), будет увеличивать его во внешнем цикле.

Попробуйте это (обратите внимание на изменения идентификаторов):

    counter1 = 0
    try:
        for Result in YahooSearchResultsXML.getElementsByTagName('Result'):
            try:
                Yahoo_PageTitle = Result.getElementsByTagName('Title')[counter1].firstChild.toxml(encoding="utf-8")
            except AttributeError:
                Yahoo_PageTitle = "Sorry, no page title provided..." 
            try:
                Yahoo_PageDesc = Result.getElementsByTagName('Summary')[counter1].firstChild.toxml(encoding="utf-8")
            except AttributeError:
                Yahoo_PageDesc = "Sorry, no page description provided..."
            Yahoo_DisplayURL = Result.getElementsByTagName('DisplayUrl')[counter1].firstChild.toxml(encoding="utf-8")
            Yahoo_URL = Result.getElementsByTagName('ClickUrl')[counter1].firstChild.toxml(encoding="utf-8")
            ##  Print the output to ensure it's working.
            print counter1+1
            counter1 += 1
            print "<br />"
            print "<h2>" + Yahoo_PageTitle + "</h2>"
            print Yahoo_PageDesc + "<br />"
            print Yahoo_DisplayURL + "<br />"
            print Yahoo_URL + "<br />"
            print "<p> ----------------------------------------------------------------------------------------------------------------- </p>"
    except IndexError:
        print "Exiting@IndexError handler"
        break
    Yahoo_Score = counter1 + 1
...