www.example.com/sitemap.xml.gz のような圧縮されたサイトマップを解析し、sitemap.xml.gz をダウンロードせずにサイトマップ内のすべての URL を収集したいと考えています。
sitemap.xml.gz をダウンロードし、lxml
またはbeautifulsoup
など を使用して解凍した後に解析する方法があります。
def parse_sitemap_gz(url):
r = requests.get(url, stream=True)
if 200 != r.status_code:
return False
file_name = url.split('/')[-1]
# download the sitemap file
with open(file_name, 'wb') as f:
if not r.ok:
print 'error in %s'%(url)
for block in r.iter_content(1024):
if not block:
break
f.write(block) # can I parse it without writing to file
f.flush()
# decompress gz file
subprocess.call(['gunzip', '-f', file_name])
# parse xml file
page = lxml.html.parse(file_name[0:-3])
all_urls = page.xpath('//url/loc/text()')
#print all_urls
# delete sitemap file now
subprocess.call(['rm', '-rf', file_name[0:-3]])
return all_urls
このコードでは、圧縮されたサイトマップをファイルに書き込んでいます。私の意図は、ファイルに何も書き込まないことです。
上記のコードのインテリジェントなバージョンを学習および作成するために、ファイルをダウンロードしたりファイルに書き込んだりする必要がないように、gzip ストリームを解凍するという概念を使用して解析するにはどうすればよいですか?