python串口类多进程调用_多进程 + 多线程抓取博客园信息

为每个进程分配一定数量的页面,然后在由进程去给线程分配待抓取页面,抓取到信息之后保存到“博客园.csv”文件中。

第三方模块

aiohttp : 协程模块

beautifulsoup4:解析模块

安装 :

pip install aiohttp

pip install beautifulsoup4

多线程

asyncio协程模块,通过这模块来启用任务并限制线程数量。线程多了影响效率,因为线程是通过时间分片来模拟并行,进程是真并行

多进程

multiprocessing 进程模块通过引用pool类来启用进程池

信息保存

部分代码

import page

import asyncio

import os

from asyncrequest import asynchttp

from save import db

from multiprocessing import pool

# 抓取信息

async def fetch(url, attach=none):

reqs = asynchttp()

text = await reqs.request(url, attach)

items = page.fetchlist(text)

for item in items:

arc = page.article(item)

db.writerow({

'作者': arc.author,

'头像': arc.icon,

'地址': arc.url,

'标题': arc.title,

'推荐': arc.digg_num,

'评论': arc.comment_num,

'阅读': arc.read_num,

'发布时间': arc.time

})

# 协程任务

async def core(url, s, e):

cores = [fetch(url + str(n)) for n in range(s, e)]

await asyncio.gather(*cores)

# 入口

def main(arg):

#print(arg[0], arg[1])

asyncio.semaphore(3)

asyncio.run(core('https://www.cnblogs.com/sitehome/p/', arg[0], arg[1]))

if __name__ == '__main__':

with pool(os.cpu_count()) as p: # 开启最大进程

arg = [(1, 10), (10, 20), (20, 30), (30, 40)] # 采用 1~40页

rep = p.map_async(main, arg)

rep.get()

百度网盘

链接:https://pan.baidu.com/s/1iab8pi1fsfscmp93spux0g

提取码:4x1u

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值