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.4inpycharm.exe.vmoptions里尽是看不懂的参数,前2个好像还是系统给编译器分配的内存设置。

  File->settings瞎点了半天,也没有找到Stack有关的单词。

2.让str的强制类型转换能一次转更多。

  如果能像设置递归深度一样设置栈空间大小就好了,

threading.stack_size(200000000)

  不过用起来好像没什么效果,还是老样子。

3.或者让BeautifulSoup一次不find那么多,或者把find到的拆分成许多块。

  str拆分还能百度到方法,BeautifulSoup文档里给它4个变量的介绍少得可怜,也没有百度到。

思考一天未果。

也许你有同样困扰,也许你能给我答案,可以在下面评论。

原文地址:https://www.cnblogs.com/Zf451452043/p/10129943.html