|
|
|
@ -210,6 +210,30 @@ redisconn = redis.Redis(host = '127.0.0.1', port = '6379', password = 'x', db =
|
|
|
|
|
|
|
|
|
|
使用线程数为16的情况下,完整跑完五个种类共 1500条数据,用时80s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1,在爬取的视频评论很多的情况下,效率太低,且频次太高了容易被ban。应该设定一下,比如说只爬几页,或者只爬热门评论。而且。。哔哩哔哩的评论区是其他加载的,本爬虫在requests.get的时候,会多次爬取,太危险了。为了一条数据就多次访问,被ban风险更高了。可以改成,对单个页面就取一次网页源代码,但是这个需要真实浏览器来访问才能拿到(selenium框架),然后对这个源代码进行数据提取操作,这样可以比较好地减少爬虫访问量,降低被ban的风险。
|
|
|
|
|
|
|
|
|
|
2,爬虫结构是先完全爬取数据,存到临时内存中,最后才存入文件。风险太大,如果中途被ban了,容易导致整个爬取的过程前功尽弃,且之前数据全都丢失。
|
|
|
|
|
|
|
|
|
|
2.1,线程作用效果应为
|
|
|
|
|
|
|
|
|
|
结构:视频{页数{父评论{子评论}}}
|
|
|
|
|
|
|
|
|
|
采用多线程爬取父评论+子评论,也就是一次能对多个父子评论爬取数据;或者采用多线程爬取页数中的评论,一次能爬取多个页面。后者效率更高。
|
|
|
|
|
|
|
|
|
|
2.2,但是由于该爬虫设计结构是把全部数据都先爬取再存起来,这样子要求线程对同一个字符串结构进行数据追加,容易导致混乱(即 在线程优先级不同的情况下,多个线程同时操作一个全局字符串,可能上一条还是父评论,下一条就变成另一条父评论的子评论了。)。
|
|
|
|
|
|
|
|
|
|
2.3,整改建议是:采用多线程对多个页面爬取数据,某个线程结束时即爬完一页就把该页对应的字符串存到csv文件中,采用线程锁来控制每次存数据时都仅单个占用csv文件,防止数据混乱。这一步需要修改数据的存储过程的流程。
|
|
|
|
|
|
|
|
|
|
~~3,爬取效果不好,爬取父评论+子评论的方式,实际上意义不大。意思就是父和子评论都混到一起了,没有主次效果,应该加个标示便于直观显示。~~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 参考链接
|
|
|
|
|
|
|
|
|
|
1,[selenium+python自动化100-centos上搭建selenium启动chrome浏览器headless无界面模式](https://www.cnblogs.com/yoyoketang/p/11582012.html)
|
|
|
|
@ -242,4 +266,6 @@ redisconn = redis.Redis(host = '127.0.0.1', port = '6379', password = 'x', db =
|
|
|
|
|
|
|
|
|
|
15,[requests库使用方法汇总笔记](https://wenku.baidu.com/view/fa71322401020740be1e650e52ea551810a6c928.html)
|
|
|
|
|
|
|
|
|
|
16,
|
|
|
|
|
16,[爬虫:常见的HTTP错误代码及错误原因](https://blog.csdn.net/Smart_look/article/details/109967222)
|
|
|
|
|
|
|
|
|
|
17,
|