一直想做一个能把理想论坛指定页范围的帖子都能完整下载下来的爬虫,但未能如愿. 主要的障碍在并发数的控制和长时间任务的突然退出,比如想下载前五页的帖子,分析后可得到大约15000个主贴或子贴,如果用回调函数直接在循环中访问是不行的,程序会报Error:socket hang up异常,大约一次只能并发百个左右(其实这个数很神奇的和Python理想爬虫的最高线程数接近了).如果一次性把一万五千个回调都发出来,那连本机的有线网络都会短时间崩塌,路由器的访问互联网的功能也会中断几分钟. 于是采用了Eve…
//====================================================== // 理想论坛帖子下载爬虫1.09 // 使用断点续传模式,因为网络传输会因各种原因中断 // 2018年5月4日 //====================================================== var http=require("http"); // http模块 var zlib = require('zlib'); // 用于解析gz…
在1.06版本时,访问网页采用的时http.request,但调用次数多以后就问题来了. 寻找别的方案时看到了https://cnodejs.org/topic/53142ef833dbcb076d007230,感觉request可以试试,之前在别的地方也听人夸过. 于是替换了saveTopicDetails函数的访问模块,经测试还不错,一万多条数据能跑下来,出错的几率不算高,不过今天也有休盘理想论坛压力轻的利好因素. 代码如下: //==============================…
//====================================================== // 理想论坛帖子下载爬虫1.06 // 循环改成了递归,但最多下载千余文件就崩了 // 2018年4月27日 //====================================================== var http=require("http"); // http模块 var zlib = require('zlib'); // 用于解析gzip…
1.01-1.03版本都有多线程争抢DB的问题,线程数一多问题就严重了. 这个版本把各线程要添加数据的SQL放到数组里,等最后一次性完成,这样就好些了.但乱码问题和未全部完成即退出现象还在,而且速度上应该大力提高. 本该就是把DB操作尽可能一次性完成,节约时间又安全,不该是各个线程自己去开关数据库存取的模式.是我事先没考虑好. 现在代码如下: # 理想论坛爬虫1.04,用于爬取主贴再爬子贴 from bs4 import BeautifulSoup import requests import…
用Nodejs把Python实现过的理想论坛爬虫又实现了一遍,但是怎么判断所有回调函数都结束没有好办法,目前的spiderCount==spiderFinished判断法在多页情况下还是会提前中止. 代码如下: //====================================================== // 理想论坛帖子下载爬虫1.01 // 目标网址:http://bbs.tianya.cn/post-no05-308123-1.shtml // 2018年4月16日 /…
在1.01版本中,我发现各回调函数找到数据后再插入数据库有个竞争问题不好解决,如果等所有回调都完成也没有好的处理方法,因为启动不止一处启动了新的TopicSpider实例. 于是我决定把读数据和写DB分开,爬虫负责前一部分,insertDB.js负责后一部分. 这样做避免了爬虫写DB竞争和判断所有回调都结束的难点问题. 而insertDB.js中,等待所有读文件的回调都结束是有办法的,那就是并行化控制,毕竟读各个文件比较简单,易于用task控制. 下面是爬虫代码: //=============…
代码: # 单帖爬虫,用于爬取理想论坛帖子得到发帖人,发帖时间和回帖时间,url例子见main函数 from bs4 import BeautifulSoup import requests import threading import re user_agent='Mozilla/4.0 (compatible;MEIE 5.5;windows NT)' headers={'User-Agent':user_agent} # 帖子爬虫类(多线程) class topicCrawler(thr…
昨天认识到在本期同时起一百个回调/线程后程序会崩溃,造成结果不可信. 于是决定用Python单线程操作,因为它理论上就用主线程跑不会有问题,只是时间长点. 写好程序后,测试了一中午,210个主贴,11974个帖子,11974个文件都生成了. 当然,程序没有一蹴而就,原有的对requests属性不加限制时最多跑个四千条就崩了,参考了 “https://blog.csdn.net/shi_weihappy/article/details/51009602”的做法后才知道要将requests.sess…
代码: # 单帖爬虫,用于爬取理想论坛单个帖子得到发帖人,发帖时间和回帖时间并存入数据库,url例子见main函数 from bs4 import BeautifulSoup import requests import threading import re import pymysql user_agent='Mozilla/4.0 (compatible;MEIE 5.5;windows NT)' headers={'User-Agent':user_agent} # 帖子爬虫类(多线程)…