java 爬虫多线程_在爬虫开发中,如何利用多线程技术提高下载速度?

提高下载速度有几种方法。

1.多线程。类似于同时干几个活。常用的库有concurrent中的ThreadPoolExecutor。

给个以前我用的伪代码

import concurrent

from concurrent.futures import ThreadPoolExecutor

def download_all_articles(list_page_urls):

# 多线程下载器

works = len(list_page_urls)

with concurrent.futures.ThreadPoolExecutor(works) as exector:

for url in list_page_urls:

exector.submit(download,url)#提交给下载函数

def download(url):#下载函数

html = request_page(url)

2.异步。相当于爬虫任务分为两块,一个是爬取,一个是解析。爬到一个链接就交给解析了,继续爬取,不用管解析的事情。解析就专门负责提取下载地址链接和下载。

一般用的库有aiohttp和asyncio。普通的爬虫程序,通过调用库函数来转换为异步下载,关键就是下面几句async with 和await 。给个以前我用的伪代码

import aiohttp

import asyncio

async with aiohttp.ClientSession() as session:

async with session.get(str(url_girl_p),headers=headers) as response:

html=await response.text()

最后,需要注意的地方在于,不要因为你的爬虫影响人家网站正常业务。很容易因为多线程就上了反爬虫的黑名单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值