提高下载速度有几种方法。
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()
最后,需要注意的地方在于,不要因为你的爬虫影响人家网站正常业务。很容易因为多线程就上了反爬虫的黑名单