爬虫心得

国庆写爬虫的日常

这是第二次写爬虫了,上一次写爬虫还是用的经典的urllib,用正则表达匹配,超级难受。这次学会的新技能就是requests和bs4,requests真的很好用,使用requests获得的网页十分全面,并且网页里面的内容分类十分明确,配上bs简直是打开了新世界的大门。

这次使用爬虫主要是爬取小说,还算比较简单,打开小说的章节之后直接获取contents就行了。但是就是这么一个简单的操作也遇到了很多的麻烦,也搞的很头疼。

首先先说自己考虑到的爬虫功能吧:

  1. 先找一个网站,然后按照小说分类,查找将当前网站上存在的小说而自己本地上没有这个小说,将这个视为新出现的小说爬取下来。
  2. 自动填写爬取日志,记录新爬取到的小说。记录章节日志,也就是记录这个小说的名字和最后一个章节。
  3. 小说自动更新,不停的扫描网站上的小说,并且记录网站小说的最后一个章节,查看这个章节和自己本地记录的最后章节是否一致,不一致则将新出来的章节填入本地小说文档之中。
  4. 扩大范围,找多个小说网站,爬取里面小说并且维持更新。

 

然后分析以下自己遇到的相关问题:

  1. 爬虫总是爬一段时间自动停止。这是遇到的最大的问题,因为老是停止就会导致爬取的效率非常的慢,只要稍不注意就停止了。导致这个问题的原因也有很多。首先是学校的这个垃圾网络,坑啊,网络限速,导致requests.get()的速度慢得令人发指,在设置超时的时候不好设置,每天晚上还要自动断网一段时间。这就必须把程序放在服务器上跑,这又导致了一系列问题。第二个原因就是经验不足,考虑不充分,代码的容错程度太低了,对于各种错误没有抓取到导致程序发生错误强行退出。错误原因之后再分析。
  2. 爬取的网址选歪了,本来是要爬取小说的,找了一个出名的小说网站但是万万没想到我找的网站是那个网站的盗版,总结来说我爬出来的小说是盗版的盗版,尴尬。但是这样又好又坏,好的就是这个网站对于我们这种新手来说简单。坏的就是爬出来的小说有点猎奇,全是啥总裁什么的。有点难受。
  3. 自己的服务器和自己的电脑不匹配。当时在选服务器的时候是拿来FQ的,就随便选了一个,不匹配导致很多问题需要解决,比如:系统里面自带的库不同,路径不同。弄得很难受。最大的问题是网速的不匹配,这是最大的坑点。垃圾学校里面的网络限速了,访问小说的章节是不会超过网站限定的频率,但是服务器的网速比较快,超过了限定频率,导致返回500,爬取的章节缺失。这就需要找错误了,本地没有办法找,刚开始没有这方面的经验,只能靠猜,然后尝试去解决,没有找到根本问题,猜了丢包,异步加载等问题,结果是超频率了。所以以后面对问题的第一时间要尝试去查找根本问题,不然还是没解决,该出错还是出错,效率还很低。
  4. 心态不对,在调试程序的时候就不能去考虑爬取的成果问题,要不停的找程序bug,添加自己没考虑到的功能,该中断的时候立即中断,一个程序才能慢慢的成熟起来,容错程度才能更高。

 

获得的相关经验:

  1. 最容易出错的地方就是网页请求的部分,即requsts.get(),这里可以尝试多次请求,设置合理的timeout,进行伪装:headers,代理。相关内容可以查看大佬的博客:https://blog.csdn.net/offbye/article/details/52235139,出现的问题可以是超时,请求超时,socket超时。还需要注意的是请求没有问题但是返回的结果有问题,比如返回的404,500,503等,所以面对返回的响应码也要进行判断,当返回的不是200的时候怎么处理,最好都打出来打到文档里面来查看。在每一次调用open_url时都要对各种情况进行判断。
  2. 对于爬虫爬取进程的记录,这个在一开始就必须考虑,如果爬虫中途中断了,不可能全重新爬取,所以在爬取的中途就一定要用文档记录爬取进程以便能够快速找到断点。在爬虫运行时将爬虫进行的活动都打印出来,这样在找错误的时候就更容易将错误定位。
  3. 框架尽量分明一些,取名规范一些。这样在后面看自己代码的时候不至于超级蒙蔽。
  4. 能够本地跑的坚决不用网络,网络请求和传输太慢了,根本不再一个量级之上啊。
  5. 服务器screen,一定要先创建一个screen,即screen -S [name],这样在程序出错的时候cpu不会马上杀死进程回收,不然自己的程序怎么死的都不知道。坑啊,不知道有些大哥在博客写screen用法介绍的时候怎么都不说一下啊,坑死新手了。
posted @ 2018-10-03 11:54  GoldenFingers  阅读(1008)  评论(0编辑  收藏  举报