最近golang写得多,但是采集数据还是习惯性地切换到了python。
1.采集
刚开始调试、测试使用的单线程,经过2个小时,终于跑通了。觉得数据量不大,跑跑一两个小时也采集完了,实际并没有。超时中断了很多次,又不得不做补偿措施。前后又折腾了俩小时才跑了一小半的数据,没跑下来的都是异常的。脑子木了。
因为要处理水印,忍住没切换到go。
接下来一个小时不到,采用python multiprocessing
爬虫技术栈:
import urllib3 as urllibfrom bs4 import BeautifulSoupimport timefrom urllib.parse import urlencode, urlparseimport osimport multiprocessing
本机:
Mac m1, conda env python3.10
采集效率比对:
单线程 444s - 丢失数据,做补偿措施也只跑了不到2/3
多进程 172s - 100%
def scrawl(): t1 = time.time() pools = multiprocessing.Pool(8) missingWords = pools.imap(parsingWord, wordsLeft) pools.close() pools.join() t2 = time.time() print("耗时:", t2 - t1)
技术细节忽略,
自我总结:容易被问题套住,跳不出思维怪圈。
2.图片清洗
接上一篇文章:python pillow-GIF 去除水印并压缩
因为gif处理流程相对复杂一点,准备在单线程基础上增加协程并行处理能力。
记录:
单线程:处理一张gif 耗时26s,优化业务处理流程后16s多。
协程:待补充
留言与评论(共有 0 条评论) “” |