sitemap.xmlをダンプする
Jan 30, 2021 17:19 · 319 words · 1 minute read
あるサイト配下のページを全部一覧したいときはsitemap.xmlを参照することになるが、sitemapがツリー構造になってたり、マイナーな場所にxmlファイルが配置されてたりとやっかいなこともある。そういうときはライブラリに頼ってしまうと手っ取り早い。
sitemap.xmlを抜いてくるのにはこれを使えばよい。
抜いてきた情報を保存するのにはtinydbが便利。
#!/usr/bin/env python
from tinydb import TinyDB
from usp.tree import sitemap_tree_for_homepage
db = TinyDB('tinydb/sitemap.json')
table = db.table('sitemap')
tree = sitemap_tree_for_homepage('https://example.com/')
li = []
for idx, page in enumerate(tree.all_pages()):
li.append({
"url": page.url,
"last_modified": page.last_modified.isoformat() if page.last_modified else None,
"priority": float(page.priority) if page.priority else None,
})
if 50000 < len(li):
table.insert_multiple(li)
li = []
print(idx)
注意点
- 数万行入れるときtinydbは
insert_multiple
を使わないとかなり遅い。 ultimate-sitemap-parser
はpriority
をDecimalで返してくるので、JSONにするときはfloatに丸めてしまう。