我有一个python循环,它使用selenium从网站获取一些数据并将其存储在SQL数据库中。开始时每个循环大约需要一秒钟,但经过一段时间它会越来越慢......我认为问题是内存问题,但我不知道如何解决它。 这是我的代码:
count = 0
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
con = sql.connect(user="user", passwd="passwd", db="db", host="localhost")
cur = con.cursor()
def create():
if random.random() < 0.5:
driver.get('http://www.example.com/w')
else:
driver.get('http://www.example.com/p')
name = driver.find_element_by_xpath("//div[@class='address']/h3").text
name1 = name.split(" ")[0]
name2 = name.split(" ")[1]
test = driver.find_element_by_xpath("//div[@class='adr']").text
test2 = test.replace("\n", " ")
dd = driver.find_element_by_xpath("(//dl[@class='dl-horizontal')[1]/dd").text
dd2 = driver.find_element_by_xpath("(//dl[@class='dl-horizontal'])[2]/dd/a").text
day = driver.find_element_by_xpath("(//dl[@class='dl-horizontal'])[5]/dd").text
i = "','"
try:
values = unidecode("'" + name1 + i + name2 + i + dd + i + dd2 + i + day + i + test2 + "'")
cur.execute("INSERT INTO accounts (name1,name2,dd,dd2,day,test2) VALUES (" + values + ")")
con.commit()
global anzahl
anzahl += 1
sys.stdout.write('.')
sys.stdout.flush()
gc.collect()
except sql.Error as e:
print("Error %d: %s" % (e.args[0], e.args[1]))
gc.collect()
start = time.time()
for _ in range(200):
create()
cur.close()
con.close()
end = time.time()
我没有看到任何东西会减慢你的循环速度。我试过gc.collect()
,但它没有改变任何东西。
我能做些什么,我的循环在一段时间后不会减速?
答案 0 :(得分:0)
可能会降低代码速度的因素:
driver
对象?sys.stdout.write
和print
),具体取决于实际流。它是控制台吗?