爬虫学习:简单的多线程加速爬取

 

 

 

接上一篇:爬虫学习:xpath爬取评书网

对于爬取要下载数据,如果数据量比较大,单线程爬虫将会花费很长的时间,而且电脑的硬件和网络带宽也无法得到很好地利用。因此,本文将利用python的threading模块对爬虫进行简单的优化。

相关理论就不多说了,具体看:Python3多线程threading基于线程的并行

代码如下:

#多线程
from lxml import etree
import requests
import threading

headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}
url='https://www.5tps.com/html/23602.html'
html=etree.HTML(requests.get(url,headers=headers).content)
results=html.xpath('//ul/li/a/@title') #音频链接
resultst=html.xpath('//ul/li/a/text()') #章节名字

for i in range(len(results)):
    results[i]='http://psf.tt56w.com:8000/单田芳/单田芳_破晓记(37回)/'+results[i]
    resultst[i]=resultst[i].replace('\xa0','')

def save_file(result,resultt):
    with open('G:\dota\pingshu3\{}.mp3'.format(resultt[1:-1]),'wb') as f:  
        f.write(requests.get(result).content)  #下载并保存,具体保存路径根据需要修改
    print(resultt[1:-1])

def main():          
    for i in zip(results,resultst):
    #创建线程  
        thread_spider = threading.Thread(target=save_file, args=(i[0],i[1]))
    # 启动线程
        thread_spider.start()

        
if __name__ == '__main__':
    main()

 

 

PS:需要注意的是,多线程下爬取的结果并不是按顺序排列的,所以在爬取一些有一定顺序的数据时,可以在爬取过程中为数据添加序号,爬取结束后按照序号进行排序处理!!!

 

参考资料:

https://www.runoob.com/python3/python3-multithreading.html

https://docs.python.org/zh-cn/3/library/threading.html

https://www.cnblogs.com/insane-Mr-Li/p/9879356.html

 

posted @ 2020-02-18 20:56  人生多风雨  阅读(521)  评论(0编辑  收藏  举报