在使用python爬虫的过程中,当我们掌握了爬虫的基本技术,然后开始我们的爬虫之旅的时候,各位小伙伴一定会遇到些许问题因而非常苦恼,现在我们就来探讨下这些在python爬虫的过程中可能遇到的问题,以及如何解决这些问题。
第一个,JS加密技术。一般网页的开发者为了不让自己的js代码轻易被别人拷贝,所以会采取一些加密的手段,来保护自己的代码。但是,对于爬虫的用户来说,爬取到一些个乱码实在是不太好受。因此,我们就需要解密。我们可以通过debug来找到js加密解密的代码,然后通过python重新实现,但是这种方法很耗时。或者,我们可以使用selenium工具实现,但是这个工具的运行效率较低。
第二个,爬虫策略。爬虫的大部分时间都用在了访问网络的过程中,爬虫的目的在于获取网页上的数据信息并对爬虫获得的数据进行提取等处理。但是,如果我们爬虫和提取作为整个的爬虫流程,效率其实是很低的。所以,我们应该将这两个过程分开,单独进行爬虫,单独进行提取才是更好的策略。
第三个,增量爬取。增量爬取就是爬虫不去重复下载已经下载过的内容,要实现增量爬取,我们需要使用一个新的概念-网址池。网址池是用来统一管理所有的url地址的,我们通过网址池来记录哪些是我们python爬虫访问过的,从而避免重复。网址池的用处还可以实现断点续爬等等。断点续爬就是让之前没有爬取完毕的url继续爬虫。
第四个,爬虫去重。我们在爬取内容的时候,很可能这个内容被转载多次,因此在多个url地址上可能会是相同的内容。如果我们不加分辨就进行爬虫,毫无疑问会获得大量重复的内容。一个简单的方法是,通过文章内容的几段话作为这个文章的标识符,将其存储起来。一旦再次遇到相同的标识符,那就是重复的内容,不再进行爬虫。
第五个,爬虫被封禁。爬虫会给服务器带来很大的负载,因此很多服务器会限制爬虫,甚至禁用爬虫。大家都知道要构造合理的http访问头,如user-agent域的值。但是,这里还有许多其它的避免被封禁的需要注意的问题,如放慢爬虫访问速度,使得爬虫访问路径和用户访问路径一致,采取动态ip地址等等。