Skip to main content
 首页 » 编程设计

python之Spynner 崩溃 python

2025年12月25日35Renyi-Fan

我正在构建一个 Django 应用程序,并且正在使用 Spynner 进行网络抓取。我有这个问题,我希望有人可以帮助我。

我在模块“crawler.py”中有这个功能:

import spynner  
 
def crawling_js(url) 
    br = spynner.Browser() 
    br.load(url) 
    text_page = br.html 
    br.close (*) 
    return text_page 

(*) 我也试过 br.close()
在另一个模块(例如:“import.py”)中,我以这种方式调用该函数:
from crawler import crawling_js     
 
l_url = ["https://www.google.com/", "https://www.tripadvisor.com/", ...] 
 
for url in l_url: 
    mytextpage = crawling_js(url) 
    .. parse mytextpage....  

当我将第一个 url 传递给函数时,当我传递第二个“url”python 崩溃时,一切都是正确的。 Python 在这一行崩溃:br.load(url)。有人可以帮助我吗?非常感谢

我有:
Django 1.3
python 2.7
斯皮纳 1.1.0
PyQt4 4.9.1

请您参考如下方法:

为什么每次调用 crawling_js() 时都需要实例化 br = spynner.Browser() 并关闭它。在一个循环中,这将利用大量资源,我认为这就是它崩溃的原因。让我们这样想,br 是一个浏览器实例。因此,您可以让它浏览任意数量的网站,而无需关闭它并再次打开它。以这种方式调整您的代码:

import spynner 
 
br = spynner.Browser() #you open it only once. 
 
def crawling_js(url): 
    br.load(url) 
    text_page = br._get_html() #_get_html() to make sure you get the updated html 
    return text_page  

然后,如果您坚持稍后关闭 br,您只需执行以下操作:
from crawler import crawling_js , br 
 
l_url = ["https://www.google.com/", "https://www.tripadvisor.com/", ...] 
 
for url in l_url: 
    mytextpage = crawling_js(url) 
    .. parse mytextpage.... 
 
br.close()