在Python中附加到列表时出现内存错误

在Python中附加到列表时出现内存错误,python,python-3.x,memory,memory-management,web-scraping,Python,Python 3.x,Memory,Memory Management,Web Scraping,我有一个8000个网址的列表。我想刮掉网站的文本,并保存为csv文件的一切。为此,我想将每个文本页保存在一个列表中。这是我到目前为止正在生成和“MemoryError”的代码 导入操作系统 从碎片进口* 导入csv 进口稀土 从inscriptis导入获取文本 从selenium.common.exceptions导入WebDriverException 可执行路径={'executable_path':'./phantomjs'} browser=browser('phantomjs',**可

我有一个8000个网址的列表。我想刮掉网站的文本,并保存为csv文件的一切。为此,我想将每个文本页保存在一个列表中。这是我到目前为止正在生成和“MemoryError”的代码

导入操作系统
从碎片进口*
导入csv
进口稀土
从inscriptis导入获取文本
从selenium.common.exceptions导入WebDriverException
可执行路径={'executable_path':'./phantomjs'}
browser=browser('phantomjs',**可执行路径)
链接=[]
将open('./Hair_salones.csv')作为csv文件:
spamreader=csv.reader(csvfile,分隔符=',')
对于spamreader中的行:
对于第行中的r:
links.append(r)
对于l in链接:
如果l中出现“yelp”:
链接。删除(l)
df=[]
对于k in链接:
温度=[]
temp2=[]
浏览器访问(k)
如果len(browser.find_link_by_partial_text('About'))>0:
about=浏览器。通过部分文本(“about”)查找链接
打印(关于['href'])
尝试:
浏览器。访问(关于['href'])

temp.append(get_text(browser.html))#如果无法将所有数据保存在内存中,则不要保存。 在高层,您的代码具有以下结构

for k in links:
    temp = []
    temp2 = []
    browser.visit(k)

    # do stuff that fills in temp

    for s in temp:
        ss = re.sub(r'[^\w]', ' ', s)
        temp2.append(ss)

    temp2 = ' '.join(temp2)
    print(temp2.strip())

    df.append(temp2.strip())

with open('Hair_Salons text', 'w') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(df)
所以,你把很多东西放进一个数据框,然后写出来——你不在循环中使用它。而不是
df.append(temp2.strip())
写入那里的文件。
使您可以在循环之外打开文件一次(可能更合理),或者打开以进行追加(使用
'a'
而不是
'w'
)。

在循环期间将数据发送到文件,而不是将其全部保存到later@doctorlove我该怎么做?我已经试过了,但每次循环都会覆盖我的文件。每次转到下一个站点时,都应该清除“browser=browser('phantomjs',**executable_path)”。类似于“driver.quit()”的内容。这可能是您的内存问题。我想我明白了,但是文件并不是每次循环运行时都被打开,是吗?我的印象是,一旦所有文本都在df中,它就会打开一次。内存问题似乎出现在temp.append(get_text(browser.html)),这是正确的-在(尝试)将所有数据读入内存后,您似乎打开了文件一次。我建议在循环之前打开它一次,读取数据并一次写入一行。或者可能在循环中重新打开,但这有点愚蠢。好吧,我回家后会尝试,如果成功的话,接受它!
for k in links:
    temp = []
    temp2 = []
    browser.visit(k)

    # do stuff that fills in temp

    for s in temp:
        ss = re.sub(r'[^\w]', ' ', s)
        temp2.append(ss)

    temp2 = ' '.join(temp2)
    print(temp2.strip())

    df.append(temp2.strip())

with open('Hair_Salons text', 'w') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(df)