2017-07-03 1 views
1

私は次のコードが何回かの繰り返しの後に機能を停止する理由がわかりません。 Pythonプロセスは端末で動作し続けますが、ファイルのダウンロードやチェックは行われません。何回か繰り返して、私のpythonプロセスが停止するのはなぜですか?

誰かが助けてくれますか?考慮すべきおかげ

#Manga downloader 
#!python 3 
import requests 
import os 
import bs4 
import time 
import urllib.request 
import shutil 
from pathlib import Path 

url='http://www.mangareader.net/' 
name=input("Enter comic name:") 
chapterstart=int(input("Enter starting chapter number:")) 
chapterend=int(input("Enter ending chapter number:")) 

nameinput=name.replace(" ","-") 

os.makedirs('Documents/Manga/',exist_ok=True) 
directorylevel1='Documents/Manga/'+nameinput+'/' 
os.makedirs(directorylevel1,exist_ok=True) 

a=chapterstart 

def imagesave(mangaUrl,filename,directorylevel2): 
    #res = requests.get(mangaUrl) 
    #print(res) 
    #res.raise_for_status() 
    fulldirectoryname=directorylevel2+filename 
    mangapath=Path(fulldirectoryname) 
    if mangapath.exists(): 
     print(fulldirectoryname + ' exists. Moving on.') 
    else: 
     print('Downloading image %s...' %(filename)) 
     req = urllib.request.Request(mangaUrl, headers={'User-Agent': 'Mozilla/5.0'}) 
     with urllib.request.urlopen(req) as response: #open(fulldirectoryname,'wb') as outfile: 
      outfile=open(fulldirectoryname,'wb') 
      shutil.copyfileobj(response,outfile) 
      response = None 
      req = None 

    #imageFile=open(fulldirectoryname,'wb') 
    #for chunk in res.iter_content(10000000): 
    # print(chunk) 
    # imageFile.write(chunk) 
    #imageFile.close() 

#for chapter 1 to 50 
def main(): 
    for a in range(chapterstart,chapterend+1): 
     b=str(a) 
     directorylevel2=directorylevel1+b+'/' 
     os.makedirs(directorylevel2,exist_ok=True) 
     c=str(a+1) 
     url='http://www.mangareader.net/'+nameinput+'/'+b 
     stopurl='http://www.mangareader.net/'+nameinput+'/'+c 
     res = requests.get(url) 
     res.raise_for_status 
     soup=bs4.BeautifulSoup(res.text,"lxml") 
     mangaElem = soup.select('#imgholder img') 
     #the imgholder is the div class name then img is the image inside 
     #print(url) 

     #for pages 1 to end 
     while url !=stopurl: 

      if mangaElem == [ ]: 
       print('Could not find image') 
       break 
      else: 
       mangaUrl=mangaElem[0].get('src') 
       filename=mangaElem[0].get('alt')+'.jpg' 
       imagesave(mangaUrl,filename,directorylevel2) 
       prevLink=soup.select('#imgholder a')[0] 
       url='http://www.mangareader.net'+prevLink.get('href') 
       res = requests.get(url) 
       res.raise_for_status 
       soup=bs4.BeautifulSoup(res.text,"lxml") 
       mangaElem = soup.select('#imgholder img') 
       #soup = None 

     a=a+1 

    print('Done') 

if __name__ == "__main__": 
    main() 
+0

つまり、いくつかのマンガをダウンロードしてから、その間で停止しますか?可能であれば、https://github.com/GrayHats/MangaReaderを参照してください。 –

+1

出力がありません?停止する行はありませんか?いいえ、事前診断はありませんか? –

+4

関連していないヒント:コンマとオペレータの間のスペースは、コードをもっと読みやすくします。 – Grimmy

答えて

0

気にいら:

あなたのコードは、フラットアウトを実行します - つまり、それはサイトから、コンピュータの速度でファイルをつかんで保持します。このサイトでは、人間の速度でファイルを取得することが期待されています。何かが高速に検出された場合、ファイルが少数しかないとアクセスがブロックされる可能性があります。私はtimeを輸入していますが、それを使用していないことがわかります。おそらく、ロックアウトされないようにアクセス間にtime.sleep(1)を追加することを意図していました。

何年も前に、私は、アクセスが非常に高速であったときにオンラインの科学的データベースから手動でサイトをブロックすることを任されることがありました。私はプログラムがブロックされないようにするべきアクセス速度(1秒あたりのページ数)を記録した政府データベースを知っています。

ネイティシェはいいですね。試すだけの価値があります。

関連する問題