我试图在python 2.7.3中使用BeautifulSoup4处理几个网页但是在每次解析之后内存使用量都会上升.此简化代码产生相同的行为:from bs4 import BeautifulSoupdef parse():f = open(index.html, r)page = Beautiful...

我试图在python 2.7.3中使用BeautifulSoup4处理几个网页但是在每次解析之后内存使用量都会上升.
此简化代码产生相同的行为:
from bs4 import BeautifulSoup
def parse():
f = open("index.html", "r")
page = BeautifulSoup(f.read(), "lxml")
f.close()
while True:
parse()
raw_input()
在调用parse()五次之后,python进程已经使用了30 MB的内存(使用的HTML文件大约是100 kB),每次调用它都会增加4 MB.
有没有办法释放内存或某种解决方法?
更新:
这种行为让我很头疼.即使应该长时间删除BeautifulSoup变量,此代码也会轻松占用大量内存:
from bs4 import BeautifulSoup
import threading, httplib, gc
class pageThread(threading.Thread):
def run(self):
con = httplib.HTTPConnection("stackoverflow.com")
con.request("GET", "/")
res = con.getresponse()
if res.status == 200:
page = BeautifulSoup(res.read(), "lxml")
con.close()
def load():
t = list()
for i in range(5):
t.append(pageThread())
t[i].start()
for thread in t:
thread.join()
while not raw_input("load? "):
gc.collect()
load()
这可能是某种错误吗?
解决方法:
尝试使用Beautiful Soup的decompose功能,当您使用完每个文件时,它会破坏树.
from bs4 import BeautifulSoup
def parse():
f = open("index.html", "r")
page = BeautifulSoup(f.read(), "lxml")
# page extraction goes here
page.decompose()
f.close()
while True:
parse()
raw_input()
沃梦达教程
本文标题为:使用BeautifulSoup的Python高内存使用率


基础教程推荐
猜你喜欢
- python之Linux基础(六) 2023-09-04
- Linux编译opencv python错误:ImportError:libjasper.so.1 2023-11-11
- 关于命令行执行Python脚本的传参方式 2022-10-20
- 在centos6.4下安装python3.5 2023-09-04
- Gnome Shell中带有通知的Python程序不起作用 2023-11-16
- 如何利用Python实现自动打卡签到的实践 2023-08-11
- CentOs系统自带python和yum卸载后的解决办法 2023-09-03
- 自然语言处理错字识别(基于Python)kenlm、pycorrector IT届的小学生 2023-09-04
- 利用 Python 开发一个 Python 解释器 2023-08-11
- Python,cx_freeze和Windows控制台 2023-11-14