2017-11-13 54 views
0

ウェブサイトのマルチプロセッシングスクラップを実行しようとしています。情報を取得するすべてのノードのリストを取得してから、データを1つ1つ並列に処理します。私のコードは以下の通りです:エラードキュメントをチェックマルチプロセスを試しているときにローカルオブジェクトをピケッとすることができません

と私のpython端子の

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
import multiprocessing 

def ResPartido(node): 

    ft=node.find_element_by_css_selector('.status').text 
    if ft.strip()!='FT': return 
    hora=node.find_element_by_css_selector('.time').text 
    names=list() 
    for nam in node.find_elements_by_xpath(
      './/td[contains(@style,"text-align")]/a[contains(@id,"team")]'): 
    name=nam.text 
    if '(N)' in name: 
     name=name.split('(N)')[0] 
    names.append(name) 
    score=node.find_element_by_css_selector('.red') 

    return [hora,name,score.text] 

if __name__ == "__main__": 

    browser=webdriver.Chrome() 
    SOME CODE 
    nodes=browser.find_elements_by_xpath(
     '//tr[contains(@align,"center")]/following-sibling::tr[.//div[contains(@class,"toolimg")]]') 
    p = multiprocessing.Pool() 

    p.map(ResPartido,nodes) <---Here is the error 
    ....... 

    >>AttributeError: Can't pickle local object '_createenviron.<locals>.encodekey' 

画像を、それはリストがpickableオブジェクトであると言い、そのための機能がメインの前に宣言されていますMultiProcessingを使用しているとき何が間違っているのか分かりません。

+0

ええ、 '_createenvironは何ですか? .encodekey'? –

+0

ピクルがどこに呼び出されているのかわかりません。それがどこにあるかを追跡できますか? – Acccumulation

+0

エラーの画像を追加しました。それは私がマップ関数と呼ぶ行にあります。変数ノードはhtmlノードのリストです。それはかなりです。 – puppet

答えて

0

私が読んでいるところでは、nodesはwebdriverオブジェクトのリストであり、シリアライズできません。このことを考えれば、唯一可能なアプローチは次のとおりです。

1-タグ全体をノードリストの要素として取得する代わりに、他のノードとの間でユニークなものだけを取得します。私の例では、各行はシリアル番号識別子を有する

nodes=browser.find_elements_by_xpath(
    '//tr[contains(@align,"center")]/following-sibling::tr[.//div[contains(@class,"toolimg")]]/@id').get_attribute() 

nodes=['1232489','1242356',......] 

2-パスそれとマップ機能にブラウザResPartido機能において

pr=partial(ResPartido,b=browser) 
p.map(pr,nodes) 

3-とともにそのユニークな行を見つけます。私はまだテストhaven'tそのバイパス、との@id

browser.find_elements_by_xpath('//tr[contains(@id,%s)]' %s node) 

を識別する文字列は、私はpickleableオブジェクト

0で問題なく意図したものを得ることができると思い
関連する問題