python BeautifulSoup 爬虫运行出现 exited with code -1073741571
首先,exited with code -1073741571意思是栈溢出。具体可以看https://blog.csdn.net/vblittleboy/article/details/6613815
它的前一个错误是程序递归深度过深。
但我没有在函数里用递归?
python认为你进入一个函数就进入更深一层的递归。
import sys#出现递归深度太深的问题? sys.setrecursionlimit(100000000)#把递归深度设深点。
可以解决,
但又出现栈溢出。在隔行输出调试法下我发现是<class 'bs4.element.Tag'>类型强制转换str处退出的程序。也就是说,它导致了栈溢出。
soup = BeautifulSoup(html, 'html.parser') pbiaoqian = soup.find('p') print(str(pbiaoqian))#有问题?
在这个错误之前,有一个问题,就是一个htm页面有很多<p>标签,但BeautifulSoup只要找一个就全在里面了。
之前用
for pbiaoqian in soup.find_all('p'): #prind(pbiaoqian.get_text())#调用方法 #print(str(pbiaoqian))#或者直接转换打印 print(pbiaoqian)#这样也能显示
它输出的结果是find到的第一个<p>标签,从头输出到尾。第二个输出,find到的第二个<p>标签开始,到尾。......最后一个<p>标签。
言归正传。
我推测,栈溢出是因为调用强制类型转换程序次数过多导致的,或者pbiaoqian里内容过多类型转换处理不了。
那么,解决方法就是:
1.报什么错从哪里解决。
但windows修改栈空间大小要在编译器里修改,因为它是由编译器自动管理的。但F:\PyCharm Community Edition 2018.2.4\bin\pycharm.exe.vmoptions里尽是看不懂的参数,前2个好像还是系统给编译器分配的内存设置。
File->settings瞎点了半天,也没有找到Stack有关的单词。
2.让str的强制类型转换能一次转更多。
如果能像设置递归深度一样设置栈空间大小就好了,
threading.stack_size(200000000)
不过用起来好像没什么效果,还是老样子。
3.或者让BeautifulSoup一次不find那么多,或者把find到的拆分成许多块。
str拆分还能百度到方法,BeautifulSoup文档里给它4个变量的介绍少得可怜,也没有百度到。
思考一天未果。
也许你有同样困扰,也许你能给我答案,可以在下面评论。