

Mac OS Sierra  
Ver 10.12.1  
Python3

取得するページはこちらです。  
[http://www.keyakizaka46.com/s/k46o/diary/member/list?ima=0000&page=0&rw=20&cd=member&ct=02](http://www.keyakizaka46.com/s/k46o/diary/member/list?ima=0000&page=0&rw=20&cd=member&ct=02)

pageを回すだけでページを巡回することができます。  
現在のコードがこちらです。

[code]

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from bs4 import BeautifulSoup
    import sys
    from urllib import request
    from urllib.parse import urlparse
    from urllib.error import URLError, HTTPError
    import os.path
    import os
    import time
    import re 
    
    
    # url先の画像を保存する関数
      def download(url):
       url = url
       headers = {
                  "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) 
    Gecko/20100101 Firefox/47.0",
                      }
    print(url)
    req = request.Request(url, None, headers)
    img = request.urlopen(req)
    localfile = open(os.path.basename(url), 'wb')
    localfile.write(img.read())
    img.close()
    localfile.close()
    
    
     # shutterstockの画像検索結果を保存
     # アクセス先遷移
     #par_url = 'http://www.keyakizaka46.com/s/k46o/diary/member/list?
    site=k46o&ima=0000&ct=17'
     #imoはページ数 ctはメンバー数
     # def page_info(url):
     #     url = url + "?ima=" + str("0".zfill(4)) + 
    "&page=8&rw=20&cd=member&ct=02"
    #     return url
    
     def main():
    
        for i in range(0,100):
            try:
                url = "http://www.keyakizaka46.com/s/k46o/diary/member/list?ima=0000&page={}&rw=20&cd=member&ct=02".format(str(i))
            # urlアクセス
                res = request.urlopen(url)
           # beautifulsoupでパース
              soup = BeautifulSoup(res.read(),"html.parser")
            # ページに存在するimgタグを検索
            for link in soup.find_all('img'):
           # 画像URLを取得
    
    
                img_url = link.get('src')
                if img_url.netloc == "http://www.keyakizaka46.com" and img_url.path.startswith("/images/"):
                    print(img_url)
    
            # ローカルに画像をダウンロード
                    download(img_url)
                    time.sleep(10)
        except HTTPError as e:
            print('Error code: ', e.code)
        except URLError as e:
            print('Error code: ', e.code)
    if __name__ == '__main__':
        main()
    
[/code]

こちらのプログラムを起動して放置したところ２時間半程度で４００枚程度の画像しか保存ができませんでした。  
こちらの処理を高速化するためにはどのようにすればよいでしょうか教えてください。


CC BY-SA 3.0
2017-06-06T04:34:25.560
35329
2018-04-23T22:15:40.587
2017-06-06T04:44:14.010
23515
23515
question
python macos python3
BeautifulSoup4でブログの画像を取得する際に高速化を行いたい。


単純に高速化を測るのであれば `time.sleep(10)` としているところは10秒待ってるので、それを減らせば速くはなるでしょう。

ただし適度に間隔をあけてアクセスすることは重要なので気をつけてください。最低でも1秒待つようにしましょう。
願わくばページのアクセスする時も間隔をあけた方が良いです。最悪訴えられます。

[code]

    # urlアクセス
    res = request.urlopen(url)
    # 1ページアクセスしたら間隔をあける
    time.sleep(1)
    
[/code]

<https://speakerdeck.com/amacbee/pythondezuo-ruwebkuroraru-men>


CC BY-SA 3.0
2017-06-08T14:31:49.100
35409
2017-06-08T14:31:49.100
2168
35329
answer