我有一個python 3腳本,它使用庫urllib.request和BeautifulSoup加載網站的內容,並將信息從它導出到csv文件或MySQL數據庫。 下面是代碼主線從腳本:從萬維網頁導出信息
# ...
url = urllib.request.urlopen("<urls here>")
html = url.read()
url.close()
soup = BeautifulSoup(html, "html.parser")
# Create lists for html elements
nadpis = soup.find_all("span", class_="nadpis")
# Some more soups here...
onpage = len(no) # No. of elements on page
for i in range(onpage):
nadpis[i] = one_column(nadpis[i].string)
# Some more soups here
if csv_export:
with open("export/" + category[c][0] + ".csv", "ab") as csv_file:
wr = csv.writer(csv_file, delimiter=';', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
wr.writerow("<informations from soup>")
# Insert to database
if db_insert:
try:
cursor.execute("<informations from soup>")
conn.commit()
except Exception:
print("Some MySQL error...")
break
# ...
全部腳本有200行代碼,所以我不會在這裏的垃圾郵件了。一切正常。問題是我需要掃描並從大量網頁中導出信息(一切都在while循環中,但現在不需要),並且它變得非常慢(幾個小時的運行時間)。
有沒有更快的方法來做到這一點?
我實現了多處理,所以我可以利用每個CPU核心,但無論如何,它可能需要24小時才能導出所有內容。我甚至在亞馬遜EC2服務器上做了一個測試,但無論如何它不是更快,所以問題不在於我的PC或互聯網連接速度很慢。
有很多方法可以提高性能,但沒有在你的問題的足夠信息。您應該確定可能的瓶頸(遠程服務器,帶寬,延遲,CPU,磁盤等),並查看是否可以儘快實現您的性能目標 – jfs