0

私は Django アプリを構築しており、Spynner を Web クロールに使用しています。私はこの問題を抱えています。誰かが私を助けてくれることを願っています。

モジュール「crawler.py」にこの関数があります。

import spynner 

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


(*)別のモジュール (例: "import.py")で br.close() も試してみました。この方法で関数を呼び出します。

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 を渡すと、2 番目の「URL」を渡すとすべてが正しくなり、Python がクラッシュします。次の行で Python がクラッシュします:br.load(url)。誰かが私を助けることができますか?どうもありがとう

私は持っています:Django 1.3 Python 2.7 Spynner 1.1.0 PyQt4 4.9.1

4

1 に答える 1

0

br = spynner.Browser() をインスタンス化し、crawling_js() を呼び出すたびに閉じる必要がある理由。ループでは、これは多くのリソースを利用するため、クラッシュする理由だと思います。このように考えてみましょう。br はブラウザ インスタンスです。したがって、Web サイトを閉じて再度開くことなく、任意の数の Web サイトを閲覧させることができます。コードを次のように調整します。

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()
于 2012-05-31T13:16:16.320 に答える