Ich versuche ein Multiprocessing-Scrape einer Website zu machen, wo ich eine Liste aller Knoten bekomme, von denen ich Informationen bekommen möchte, und dann einen Pool erzeuge, statt zu bekommen Daten eins nach dem anderen tut es parallel. Mein Code ist der folgende:Kann lokales Objekt nicht putzen, während Multiprocessing versucht wird
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'
Bild meiner Python-Terminal mit dem Fehler
Überprüfung der Dokumentation, heißt es Listen sind auswählbare Objekte, und so sind Funktionen vor dem Haupt einer deklarierten , also verstehe ich nicht, was ich falsch mache, wenn ich MultiProcessing verwende.
Uh, was ist '_createenviron. .codekey'? –
Ich sehe nicht, wo Pickle aufgerufen wird. Kannst du herausfinden, wo das ist? – Acccumulation
Ich habe ein Bild des Fehlers hinzugefügt. Es ist in der Zeile, wo ich die Kartenfunktion anrufe. Variable Knoten ist eine Liste von HTML-Knoten, und das ist es ziemlich viel. – puppet