Многопроцессорная веб-обработка с запросами и превосходством - PullRequest
1 голос
/ 25 апреля 2020

Issue

Webscraping не происходит параллельно с использованием python multiprocessing библиотеки

Общая структура кода

import requests
from bs4 import BeautifulSoup
import xlwt
from xlwt import Workbook

def webscrape(URL):
    #do some scraping
    return XYZ

def func(start_id, end_id, sheet, wb):
    URL = 'https://www.thisisaURL?page_id='
    excel_row = 1
    for i in range(start_id, end_id):
        xyz = webscrape(URL+str(i))
        sheet.write(excel_row, 0, xyz)
        excel_row += 1
        wb.save(str(start_id) + '.xls')

def init_sheet(sheet):
    sheet.write(0,0,'WebscrapingValue')
def main():
    wb1 = Workbook()
    wb2 = Workbook()
    wb3 = Workbook()
    wb4 = Workbook()
    wb5 = Workbook()
    wb6 = Workbook()

    init_sheet(sheet1)
    init_sheet(sheet2)
    init_sheet(sheet3)
    init_sheet(sheet4)
    init_sheet(sheet5)
    init_sheet(sheet6)
    p1 = Process(target=func,args=(start_id[0], end_id[0], sheet1,wb1))
    p1.start()
    p2 = Process(target=func,args=(start_id[1], end_id[1], sheet2,wb2))
    p2.start()
    p3 = Process(target=func,args=(start_id[2], end_id[2], sheet3,wb3))
    p3.start()
    p4 = Process(target=func,args=(start_id[3], end_id[3], sheet4,wb4))
    p4.start()
    p5 = Process(target=func,args=(start_id[4], end_id[4], sheet5,wb5))
    p5.start()
    p6 = Process(target=func,args=(start_id[5], end_id[5], sheet6,wb6))
    p6.start()
    p1.join()
    p2.join()
    p3.join()
    p4.join()
    p5.join()
    p6.join()

Надеемся, что эта структура помещает некоторые вещи в перспектива.

То, что я хочу

Это для того, чтобы эти файлы Excel генерировались параллельно и заполнялись

Что происходит

Только первый файл когда-либо создан, и ни один из других не создан или сохранен (похоже, что он выполняется параллельно, но он застрял)

Что я думаю, что это

Я исследовал стек и многочисленные посты, и это похоже проблема с моей requests библиотекой. Я думаю, что запросы не выполняются, что немного очевидно, когда я нажимаю CTRL + C, чтобы завершить программу. Работа requests происходит в функции websracpe(URL), на самом деле я делаю это для более чем 30 различных значений на веб-странице.

Я попытался запустить подобный код без requests, чтобы проверить, существуют ли файлы Excel генерируются параллельно и они есть! Есть ли какая-то обработка исключений для запросов, которые я не понимаю?

Извиняюсь за то, что я крипт c с моим кодом, это довольно долго, и я был бы рад ответить на любые вопросы по этому поводу.

...