我正在构建一个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在此line:br.load(url)中崩溃。有人能帮我吗?非常感谢
我有: Django 1.3 Python 2.7 Spynner 1.1.0 PyQt4 4.9.1
发布于 2012-05-31 21:16:16
为什么每次调用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()https://stackoverflow.com/questions/10833717
复制相似问题