Python CGI Script (с использованием XML и mindom) возвращает неожиданные результаты - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь проанализировать XML, возвращаемый API поисковой системы (Bing, Yahoo & Blekko). Возвращенный XML (для примера поискового запроса 'суши') из Blekko имеет вид:

<rss version="2.0">
<channel>
    <title>blekko | rss for &quot;sushi/rss /ps=100&quot;</title>
    <link>http://blekko.com/?q=sushi%2Frss+%2Fps%3D100</link>
    <description>Blekko search for &quot;sushi/rss /ps=100&quot;</description>
    <language>en-us</language>
    <copyright>Copyright 2011 Blekko, Inc.</copyright>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <webMaster>webmaster@blekko.com</webMaster>
    <rescount>3M</rescount>
    <item>
        <title>Sushi - Wikipedia</title>
        <link>http://en.wikipedia.org/wiki/Sushi</link>
        <guid>http://en.wikipedia.org/wiki/Sushi</guid>
        <description>Article about sushi, a food made of vinegared rice combined with various toppings or fillings.  Sushi ( &#x3059;&#x3057;&#x3001;&#x5bff;&#x53f8;, &#x9ba8;, &#x9b93;, &#x5bff;&#x6597;, &#x5bff;&#x3057;, &#x58fd;&#x53f8;.</description>
        </item>
</channel>
</rss>

Раздел кода Python для извлечения необходимых результатов поиска:

for counter in range(100):
    try:
        for item in BlekkoSearchResultsXML.getElementsByTagName('item'):
            Blekko_PageTitle = item.getElementsByTagName('title')[counter].toxml(encoding="utf-8")
            Blekko_PageDesc = item.getElementsByTagName('description')[counter].toxml(encoding="utf-8")
            Blekko_DisplayURL = item.getElementsByTagName('guid')[counter].toxml(encoding="utf-8")
            Blekko_URL = item.getElementsByTagName('link')[counter].toxml(encoding="utf-8")
            print "<h2>" + Blekko_PageTitle + "</h2><br />"
            print Blekko_PageDesc + "<br />"
            print Blekko_DisplayURL + "<br />"
            print Blekko_URL + "<br />"
    except IndexError:
        break

Код не будет извлекать заголовок страницы каждого результата поиска, но извлекает остальную информацию.

Кроме того, если у меня нет кода:

print "<title>Page title to appear on browser tab</title>"

где-то в сценарии заголовок из первого результата поиска принимается за заголовок страницы (т. Е. Страница отображается с заголовком «Суши - Википедия» в браузере). Если у меня есть заголовок страницы, код все равно не извлекает заголовок страницы из результата поиска.

Тот же код (с разными именами тегов и т. Д.) Имеет ту же проблему с API поиска Yahoo, но отлично работает с API поиска Bing.

1 Ответ

1 голос
/ 13 июля 2011

Я предполагаю, что метод .toxml () возвращает XML для элемента, включая его теги-разделители, и тогда вы получаете что-то вроде этого:

<h2><title>...</title></h2><br />
<description>...</description><br />
<guid>...</guid><br />

Поэтому элемент title интерпретируется как заголовок страницы, если вы заранее не укажете свой собственный. Другие элементы неизвестны браузеру, и он просто отображает их содержимое как есть.

...