検索エンジン API (Bing、Yahoo、Blekko) から返された XML を解析しようとしています。Blekko から返された XML (サンプル検索クエリ「sushi」の場合) は、次の形式を取ります。
<rss version="2.0">
<channel>
<title>blekko | rss for "sushi/rss /ps=100"</title>
<link>http://blekko.com/?q=sushi%2Frss+%2Fps%3D100</link>
<description>Blekko search for "sushi/rss /ps=100"</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 ( すし、寿司, 鮨, 鮓, 寿斗, 寿し, 壽司.</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>"
スクリプトのどこかで、最初の検索結果のタイトルがページ タイトルとして使用されます (つまり、ページはブラウザに「Sushi - Wikipedia」というタイトルで表示されます)。ページ タイトルがある場合でも、コードは検索結果からページ タイトルを抽出しません。
同じコード (タグ名が異なるなど) は、Yahoo 検索 API で同じ問題を抱えていますが、Bing 検索 API では問題なく動作します。