这是用Python3编写的代码,可以正常工作。但是用四个嵌套循环和更多的内部循环运行它的速度非常慢
如何实现itertools以加快循环速度
对于包含4列数据的25行,这大约需要20秒
import bs4 as bs
import urllib.request
import time
start_time = time.time()
a=[]
b=[]
c=[]
d=[]
for z in range(1,10):
source = urllib.request.urlopen(f'https://X.com/id={z}').read()
soup = bs.BeautifulSoup(source,'html.parser')
for i in range(0,50):
for name in soup.find_all('span',id=f"tblRightHolders:{i}:cellRHSurnameName"):
a.insert(i,name.string)
for city in soup.find_all('span',id=f"tblRightHolders:{i}:cellRHPlace"):
b.insert(i,city.string)
for street in soup.find_all('span', id=f"tblRightHolders:{i}:cellRHStreet"):
c.insert(i,street.string)
for number in soup.find_all('span', id=f"tblRightHolders:{i}:cellRHNumber"):
d.insert(i,number.string)
X = [list(e) for e in zip(a, b, c, d)]
for nested in X:
print(" - ".join(map(str, nested)))
print("--- %s seconds ---" % (time.time() - start_time))
数据的输出如下所示:
Name/Surname - City - Street - Street number
我不认为
itertools
会加快它的速度-它们可以为更可读的代码提供更好的方法。如果要加快速度,有几个选项:最后两个很可能是杀伤力过大。如果可以的话,使用joblib进行简单的并行处理(即,有多个内核可用)。Itertools不会帮助您加快速度,它们只会让您的代码变得更好
[编辑] 我确实建议先对代码计时。如果您的代码大部分时间用于下载页面,那么您可以使用joblib,但使用线程而不是进程。我今天刚刚做了一些类似的事情,有100个单独的网页请求线程
相关问题 更多 >
编程相关推荐