Многопроцессорная обработка для WebScrapping не начнется на Windows и Mac - PullRequest
1 голос
/ 24 января 2020

Я задал вопрос о многопроцессорной обработке за несколько дней go, и один пользователь прислал мне ответ, который вы можете увидеть ниже. Единственная проблема заключается в том, что этот ответ работал на его машине и не работает на моей машине.

Я пробовал на Windows (Python 3.6) и на Ма c (Python 3.8). Я запустил код на basi c Python IDLE, который поставляется с установкой, в PyCharm на Windows и на ноутбуке Jupyter, и ничего не происходит. У меня 32 бит Python. Это код:

from bs4 import BeautifulSoup
import requests
from datetime import date, timedelta
from multiprocessing import Pool
import tqdm

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

def parse(url):
    print("im in function")

    response = requests.get(url[4], headers = headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    all_skier_names = soup.find_all("div", class_ = "g-xs-10 g-sm-9 g-md-4 g-lg-4 justify-left bold align-xs-top")
    all_countries = soup.find_all("span", class_ = "country__name-short")

    discipline = url[0]
    season = url[1]
    competition = url[2]
    gender = url[3]

    out = []
    for name, country in zip(all_skier_names , all_countries):
        skier_name = name.text.strip().title()
        country = country.text.strip()
        out.append([discipline, season,  competition,  gender,  country,  skier_name])

    return out

all_urls = [['Cross-Country', '2020', 'World Cup', 'M', 'https://www.fis-ski.com/DB/cross-country/cup-standings.html?sectorcode=CC&seasoncode=2020&cupcode=WC&disciplinecode=ALL&gendercode=M&nationcode='],
            ['Cross-Country', '2020', 'World Cup', 'L', 'https://www.fis-ski.com/DB/cross-country/cup-standings.html?sectorcode=CC&seasoncode=2020&cupcode=WC&disciplinecode=ALL&gendercode=L&nationcode='],
            ['Cross-Country', '2020', 'World Cup', 'M', 'https://www.fis-ski.com/DB/cross-country/cup-standings.html?sectorcode=CC&seasoncode=2020&cupcode=WC&disciplinecode=ALL&gendercode=M&nationcode='],
            ['Cross-Country', '2020', 'World Cup', 'L', 'https://www.fis-ski.com/DB/cross-country/cup-standings.html?sectorcode=CC&seasoncode=2020&cupcode=WC&disciplinecode=ALL&gendercode=L&nationcode=']]

with Pool(processes=2) as pool, tqdm.tqdm(total=len(all_urls)) as pbar:
    all_data = []
    print("im in pool")

    for data in pool.imap_unordered(parse, all_urls):
        print("im in data")

        all_data.extend(data)
        pbar.update()

print(all_data) 

Единственное, что я вижу при запуске кода, это индикатор выполнения, который всегда равен 0%:

  0%|          | 0/8 [00:00<?, ?it/s]

Я установил пару отпечатков операторы в функции parse(url) и в for loop в конце кода, но все же, единственное, что напечатано, это "im in pool". Он выглядит как код, вообще не входит в функцию, и не go для l oop в конце кода.

Код должен выполняться через 5-8 секунд, но я жду 10 минут и ничего не происходит. Я также пытался сделать это без индикатора выполнения, но результат тот же.

Знаете ли вы, в чем проблема? Это проблема с версией Python, которую я использую (Python 3.6 32 бит) или версией какой-то библиотеки, IDK, что делать ...

...