2017-07-28 7 views
-1

次のクロールは、非常に短いものの、非常に遅いです。私は、「全編の長編映画のポップ」という意味です。ウェブクローズの最適化

def bestActressDOB(): 
    # create empty bday list 
    bdays = []  
    # for every base url 
    for actress in getBestActresses("https://en.wikipedia.org/wiki/Academy_Award_for_Best_Actress"): 
     # use actress list to create unique actress url 
     URL = "http://en.wikipedia.org"+actress 
     # connect to html 
     html = urlopen(URL) 
     # create soup object 
     bsObj = BeautifulSoup(html, "lxml") 
     # get text from <span class='bday"> 
     try: 
      bday = bsObj.find("span", {"class":"bday"}).get_text() 
     except AttributeError: 
      print(URL) 
     bdays.append(bday) 
     print(bday) 
    return bdays 

それはそれはつかむところ、リストに、それぞれの女優のwikiを訪問するURLを作成するために、これらの名前を使用することに変換し、その後、1 Wikipediaのページの表からアカデミー賞にノミネートされ、すべての女優の名前をつかみます彼女の生年月日。データは、各女優がアカデミー賞最優秀女優賞にノミネートされた年齢を計算するために使用されます。 Big Oを超えて、これをリアルタイムでスピードアップする方法があります。私はこの種のことに関してはほとんど経験がないので、これがどれほど正常であるかはわかりません。思考?

編集:要求されたサブ・ルーチン

def getBestActresses(URL): 
    bestActressNomineeLinks = [] 
    html = urlopen(URL) 
    try: 
     soup = BeautifulSoup(html, "lxml") 
     table = soup.find("table", {"class":"wikitable sortable"}) 
    except AttributeError: 
     print("Error creating/navigating soup object") 
    table_row = table.find_all("tr") 
    for row in table_row: 
     first_data_cell = row.find_all("td")[0:1] 
     for datum in first_data_cell: 
      actress_name = datum.find("a") 
      links = actress_name.attrs['href'] 
      bestActressNomineeLinks.append(links) 
    #print(bestActressNomineeLinks) 
    return bestActressNomineeLinks 
+1

速度が№1の優先度であれば、あなたのパーサを['Scrapy'](https://doc.scrapy.org/en/latest/)フレームワークに書き直す(または統合する)ことをアドバイスしたいと思います。 –

+0

返信いただきありがとうございます!このコードはSpyderで現在実行されており、Jupyterノートブックに転送されます.Jupyterのノートブックでは、データ分析と統計を補完するために使用されます。 Scrapyはそれ自身のディレクトリが必要で、JupyterのPandas + statsパッケージと統合することはできません。 – Ryan

+1

まあ、私はあなたが混ざっていると思う - 「Spyder」と「Jupyter」はIDEです。 Scrapyは、他の言葉で言えば、例えば、BeautifulSoupやその他の解析用モジュールのような、独自のものを持つモジュールです。私は 'Scand 'で' pandas'を使い、 'Spyder'で自分のコードを書いて、' bash'からパーサーを立ち上げました。 –

答えて

1

私は速くコンピュータにしようとしたりしても、Googleのクラウドプラットフォーム、マイクロソフトのAzure、またはAmazon Webサービスなどのサービス上で実行されているreccomendだろう。より速く進むコードはありません。

+0

コメントありがとう!理論的にはこれは理にかなっていますが、これは小さなデータ分析/統計プロジェクトのためのものです。私のMacはどこにいるのかが分かります。この特定のプロジェクトの追加技術を習得するための増分コストは、期待される報酬によって正当化されるものではありません。 – Ryan

+0

これらのサービスはすべて、それを実行する無料のバージョンを提供しています!私は過去にそれらを使ってきましたが、決して払わなかったのです。私が助けてくれたら、私の答えを正しいものにして、他の人が見ることができるようにしてください! – James

+0

私は彼らにチェックインします。しかし、「増分コスト」とは、この文脈では「追加のトラブル」を意味していました。上で述べたように、これはすべてJupyterノートブックで分析的/統計的な話をすることになります。 1つの場所(環境)ですべてを行うことが理想的です。私はあなたの提案をチェックアウトします。私がその道を行くならば、私は確かにあなたの応答を信用します。 – Ryan