【发布时间】:2015-12-16 16:56:48
【问题描述】:
我有一个 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 小时。我什至在 Amazon EC2 服务器上进行了测试,但无论如何它并没有更快,所以问题不在于我的 PC 或互联网连接速度慢。
【问题讨论】:
-
有很多方法可以提高性能,但您的问题中没有足够的信息。您应该确定可能的瓶颈(远程服务器、带宽、延迟、cpu、磁盘等)并查看您是否可以实现性能目标
标签: python python-3.x beautifulsoup urllib