预先准备:
python3、beautifulsoup4、bs4、内存较大的服务器
项目结构如下图所示:
思路:
为了爬取个数达百万级别的url的title,如果每个网页的延迟设置为1秒、串行爬取,大概消耗的时间将达数十万秒乃至数百万秒。
而一天仅有8万多(86400)秒,不可接受!
因此,我们采用并行的方法,利用url_distract_into_txts.py将存放url的txt文档out.txt分为9596个outi.txt文档,每个文档中存放400个url
利用nohup命令并行运行多个爬虫,在服务器后台爬取多个txt中的url的title,最后再将其合并、去重即可(out.txt需要经过预先的去重操作)
但是考虑到多进程对内存的巨大消耗,经测试,120G内存(服务器)仅可运行2500~3000个爬虫进程
因此需要在跑4次才能结束。大约会消耗半天的时间
做法:
1. 运行url_distract_into_txts.py,将存放url的txt文档out.txt分为9596个outi.txt文档,每个文档中存放400个url
2. 运行create.py,得到爬取 outi.txt的url并将其存入outputi.txt的py文件codei.py
3. 将文件夹的文件,除了out.txt,其余全部上传至服务器,利用nohup后台并行运行codei.py,每次运行2500个,共运行4次,一次时长小于1h
4. 方法1:运行merge_txt.py,将第3步得到的9000多个txt合并为一个
方法2:参照文件夹中的最后一个txt文件——将多个txt合并成一个txt.txt
5. 运行del_the_same_line.py,去除重复行
6. 从服务器中下载最终得到的文件即可
代码如下:
1. url_distract_into_txts.py:
f = open("out.txt", e