1.研究背景及其意义
互联网从发展到至今,已经深入到人们的日常生活中,并且不论老人还是小孩,多少都会接触到互联网。在这个越来越信息化的社会,互联网上的信息量更是爆炸式的增长,但是在如此巨大的信息量中,我们想要找到我们需要的价值信息就非常困难了。国内国外包含了很多搜索引擎,类似有搜狗,百度,360等等,我们如何有效的寻找具有价值的信息?网络爬虫应运而生,它可以帮助我们在繁琐的信息网中爬取出关键信息,而且可以一次性的爬取出来,省去了人力搜索。
网络爬虫技术发展至今,已经具有非常的成熟的技术架构,我们可以用它爬取我们需要的数据,并且存储在我们的数据库。例如如果我们需要爬取大量银行数据利率做数据分析时,我们不可能去每个网站去做手动统计,这样会消耗我们大量人力和时间,非常浪费资源,爬虫可以做到快速且一次性提取中一个网站中我们所需要的数据。现在不仅仅是个人需要互联网上的信息,大部分企业都会去网络上爬取公司需要的数据,甚至有的公司会专门设置一个爬虫工程师的岗位。这些充分说明了网络爬虫已经步入人们日常生活中,并且网络爬虫会有一个开阔的发展前景和魅力。
2.国内外研究现状
不管国内国外,爬虫现在的地位越来越稳固,且不可动摇,对爬虫领域的潜心研究,不管是国内,还是国外,从爬虫诞生的那一刻起,就没有停止过。据说爬虫的起源是为了统计服务器的个数。互联网发展到现在,国内国外都已经有大量引擎,
Google、百度、360等,都是采用网络爬虫原理设计的。
2020年的今天,市面上开源的主流爬虫框架有Scrapy、Nutch等,爬虫工具有Content、火车采集器等。Scrapy属于国内的一款,它使用极为方便,可以爬取大多数静态网页的内容,可以根据需求定制集成一些工具,爬取效率较高。但也有局限性,对于动态JS网页必须借助于第三方工具,爬取主要手段xpath解析或者正则提取。国外的比较流行的框架是ContentGraber,它是一款面向企业级的的网络爬行软件,它几乎可以从任何网页中提取数据,并且可以结构式的保存,它的功能十分强大,适合高级程序员做一些更复杂的事。而且目前,单机的Scrapy系统也可以结合redis数据库,利用消息队列发布任务,做一个分布式爬虫系统,主要利用redis为内存数据库的特点去发布任务,多个Scrapy去抢任务,提高整个爬虫效率。
近几年,对爬虫方面的工具集也从未停止过,国内外学者都在不断创新和改进现有的技术,曹文斌等人借助自动化测试工具selenium模拟浏览电商网页进行爬取,侯志江等人用自动化交互式采集工具解决了Ajax动态数据的爬取问题。
3.选题研究的内容
本论文研究内容是基于Python的爬虫网络设计,利用Python的Scrapy的框架搭建爬虫网络,Django框架做后台数据管理系统
3.1掌握Python语言的特性
Python语法结构相对于其他语言来说比较简单,并且具有一些其他语言不具备的优势,比如字符串切片操作、一句代码换值操作等。它具有可移植性,可在不同操作系统中进行代码移植,不会影响它的执行;Python属于解释性语言,编译的代码可在操作系统中直接执行,不需要转换为二进制;Python具有很多强大的第三方库,可应用在不同的操作空间里,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器等,能够提高程序编写效率。
3.2Scrapy框架流程的使用
网络爬虫就是模拟客户端发送网络请求,按照一定规则,抓取互联网信息的程序;Scrapy框架是Python中一个比较强大的爬虫工具,它主要分为引擎、调度器、爬虫模块、项目管道、下载器中间件、爬虫中间件、调度中间件等;找到一个网页中url,引擎把它封装成一个请求传给下载器,下载器将资源下载下封装成应答包,爬虫解析Response,解析出实体Item,交给实体管道进一步处理,然后把Url交给调度器等待抓取。利用Scrapy框架爬取一个url需要5步,第一步,创建一个蜘蛛,也就是
spider.py文件,用来对url进行解析;第二步,找出你需要在网页中爬取的数据,然后在items.py中创建models,类似与数据库表中的字段;第三步,可以在中间件中做一些网页中做一些应对反爬策略的方法,比如应对js加载,可以使用selenium工具做一些滚动预加载;第四步,开始爬出,实时注意控制板是否有错误发生;第五步,利用pipelines.py文件将爬取的内容存入文件中或者写入准备好的数据库的表中。
3.3Django框架的使用
Django框架是Python中应用广泛的框架,具有非常多的功能,使用于大型工程的创建,而且拥有着自带的admin后台管理系统,是一款典型的MVC框架。在本系统设计中,Scrapy框架将数据爬取并存入数据库中,Django框架连接数据库,将数据显示给用户。Url采用通用的restful风格,restful风格是一种url设计风格,大部分程序都会采用这种通用的url风格,具有很强的实用性。Django框架一般在setting配置数据库的的连接,包括一些中间件的设置。
4.常见反爬策略以及应对方法
4.1动态JS加载
动态JS加载是指在一般网页中,我们都能在浏览器源码中不能直观看出来确又在网页中显示出来的东西。
4.2限制主机IP
我们每一人的主机只有一个唯一IP,我们在爬取某些网站资源时,如果我们一直窃取网站内容,它会限制我们IP不能对该网站进行访问,这种问题我们该怎样解决呢?我们可以再middware.py文件中维护一个代理ip池,网站上有免费的代理IP,也可以在某宝上购买一定数量的合法IP,供我们使用。
4.3验证码限制
(1)大家在登录的时候都会遇到滑动验证码或者输入字符类似的验证码,遇到这种情况,他会阻止我们对网站进行爬虫,我们虽然可以用selenium做自动登录,但无法获取这种动态验证码的值。
4.4检验数据头
网站管理人员会根据请求的user-agent判定你是不是机器爬虫。所以,此时往往就需要伪装user-agent,模拟成真实的浏览器去取出内容。我们可以根据我们访问的网页找到我们的user-gent,作为报文直接访问网站。