【发布时间】:2017-11-30 15:48:12
【问题描述】:
我有一个包含 8000 个网站网址的列表。我想从网站上刮下文本并将所有内容保存为 csv 文件。为此,我想将每个文本页面保存在列表中。到目前为止,这是我的代码,它正在产生“MemoryError”。
import os
from splinter import *
import csv
import re
from inscriptis import get_text
from selenium.common.exceptions import WebDriverException
executable_path = {'executable_path' :'./phantomjs'}
browser = Browser('phantomjs', **executable_path)
links = []
with open('./Hair_Salons.csv') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
for r in row:
links.append(r)
for l in links:
if 'yelp' in l:
links.remove(l)
df = []
for k in links:
temp = []
temp2 = []
browser.visit(k)
if len(browser.find_link_by_partial_text('About'))>0:
about = browser.find_link_by_partial_text('About')
print(about['href'])
try:
browser.visit(about['href'])
temp.append(get_text(browser.html)) # <----- This is where the error is occuring
except WebDriverException:
pass
else:
browser.visit(k)
temp.append(get_text(browser.html))
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)
如何避免出现内存错误?
【问题讨论】:
-
在循环期间将数据发送到文件,而不是全部保存到以后
-
@doctorlove 我该怎么做?我已经尝试过了,但似乎每次循环循环时都会覆盖我的文件。
-
您应该在每次转到下一个站点时清除“browser = Browser('phantomjs', **executable_path)”。像“driver.quit()”这样的东西。这可能是您的内存问题。
标签: python python-3.x memory memory-management web-scraping