2017-07-19 19 views
1

私が訪れたページからhtmlを保存するscrapy Webクローラーを作成しています。私はまた、自分のファイル拡張子でクロールしたファイルを保存したい。 Scrapyダウンロード可能なファイルを保存する

この

は私が持っているもので、これまで スパイダークラス

class MySpider(CrawlSpider): 
    name = 'my name' 
    start_urls = ['my url'] 
    allowed_domains = ['my domain'] 
    rules = (Rule (LinkExtractor(allow=()), callback="parse_item", follow= True), 
) 

    def parse_item(self,response): 
     item = MyItem() 
     item['url'] = response.url 
     item['html'] = response.body 
     return item 

pipelines.py

save_path = 'My path' 

if not os.path.exists(save_path): 
    os.makedirs(save_path) 

class HtmlFilePipeline(object): 
    def process_item(self, item, spider): 
     page = item['url'].split('/')[-1] 
     filename = '%s.html' % page 
     with open(os.path.join(save_path, filename), 'wb') as f: 
      f.write(item['html']) 
     self.UploadtoS3(filename) 

    def UploadtoS3(self, filename): 
    ... 

リンクは、ファイルの拡張子で終わるかどうかを検出するための簡単な方法がありますそのファイル拡張子に保存しますか?私が現在持っているものは、拡張子にかかわらず.htmlに保存されます。

は私が

filename = '%s.html' % page 

を削除することもできますし、それが自身の延長だとして保存するだろうと思うが、私が代わりにhtmlとして保存したい場合は、そこにあるように、それは、ASPXで終わるかのよう

答えて

0

は、私は正確ならば何

if not '.' in page: 
     fileName = '%s.html' % page   
    else: 
     fileName = page 
1

このよう.formatは終わりがない「http://google.com」のような場合のために - これを試してみてください...

import os 

extension = os.path.splitext(url)[-1].lower() 
#check if URL has GET request parameters and remove them (page.html?render=true) 
if '?' in extension: 
    extension = extension.split('?')[0] 

は、それが空を返すかどうかを確認することをお勧めします。

+0

をやってしまいました '?'探す? – Bhetzie

+0

URLにGETリクエストパラメータがあるかどうかを確認して削除します。例: 'http://google.com/page.html?render = true' – Akustik

関連する問題