用请求和excel进行多处理的网页抓取。

问题描述 投票:1回答:1

问题

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文件并行生成,并填入

发生了什么

只有第一个文件被创建,其他的文件都没有被创建或保存(它看起来像是在并行执行,但它被卡住了

我认为它是

我研究了Stack和许多帖子,这似乎是我的 requests 库。我认为请求失败了,这在我按CTRL+C键结束程序时有点明显。在 requests 的工作 websracpe(URL) 函数,实际上,我正在为一个网页上的30多个不同的值做这件事。

我试着运行一个类似的代码,但没有 requests 看看excel文件是否是并行生成的,是的!是不是有什么异常处理的请求我不明白?是否有一些我不理解的请求的异常处理方法?

很抱歉,我的代码太神秘了,它很长,我很乐意回答任何关于这方面的问题。

python python-requests multiprocessing xlwt
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.