次のクロールは、非常に短いものの、非常に遅いです。私は、「全編の長編映画のポップ」という意味です。ウェブクローズの最適化
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の優先度であれば、あなたのパーサを['Scrapy'](https://doc.scrapy.org/en/latest/)フレームワークに書き直す(または統合する)ことをアドバイスしたいと思います。 –
返信いただきありがとうございます!このコードはSpyderで現在実行されており、Jupyterノートブックに転送されます.Jupyterのノートブックでは、データ分析と統計を補完するために使用されます。 Scrapyはそれ自身のディレクトリが必要で、JupyterのPandas + statsパッケージと統合することはできません。 – Ryan
まあ、私はあなたが混ざっていると思う - 「Spyder」と「Jupyter」はIDEです。 Scrapyは、他の言葉で言えば、例えば、BeautifulSoupやその他の解析用モジュールのような、独自のものを持つモジュールです。私は 'Scand 'で' pandas'を使い、 'Spyder'で自分のコードを書いて、' bash'からパーサーを立ち上げました。 –