爬虫的关键技术(以电影数据的爬取为例)

源代码见项目crawler。

dao层:主要和数据库进行交涉,本包主要是向数据库中添加电影信息,评分信息以及从数据库中读出电影信息;
model层:主要把对象封装起来,本包主要把电影信息和评分信息作为两个对象,将其属性封装起来;
util层:常用的操作放在一个包里,本包主要创建与数据库的连接,URL的获取和数据格式的定义;
search层:项目的核心业务层,主要分析如何从网页中爬取数据,先“下载”页面,再分析页面,获取所需信息和URL,并将URL加入到URL队列中;
engine层:项目的业务“实现”层,将前面的各层整合起来。

具体各层功能如下:
util层:
DataUtil:1.评分格式;
                 2.判断所获取的电影名是否符合规范。
DBUtil:1.创建与数据库的连接(用户名+密码+数据库所在位置(一般位于本地));
              2.初始化数据库的表;
              3.判断某个电影是否存在数据库中;
              4.关闭与数据库的连接。
URLUtil:1.主界面URL+变化部分=URL,本项目为:http://www.imdb.cn+ /Sections/Genre/Drama/4(数字是变化的,不同的数字表示不同的电影列表的呈现);
                2.获取电影类型,本项目为:(例如:喜剧类型的电影) http://www.imdb.cn/Sections/Genre/Drama,从该条URL中可获取该电影的类型为Drama;
                3.获得搜索某个电影的URL,本项目为:(例如:阿甘正传) http://movie.douban.com/subject_search?search_text=+阿甘正传;
                4.获得某个电影的更多评分的URL,本项目为:(例如:阿甘正传的短评) http://movie.douban.com/subject/1292720/+ comments?sort=new_score
                5.获得某个电影的评分页面的URL并且限制显示用户评分的条数,本项目为:(例如:阿甘正传的短评并限制用户评分条数为20) http://movie.douban.com/subject/1292720/comments?start=+20+&sort=new_score
 


dao层:
IUserDao:定义接口,向数据库中添加电影名和从数据库中读取电影名;
UserDao:1.传入 参数 movie对象,并将对象的各个属性添加到数据库表movies中;
                   2.传入参数rate对象,并将对象的各个属性添加到数据库表rates中;
                   3.从数据库表movies中读取电影对象并把结果读到ResultSet中;



model层:
主要把电影信息封装到电影类中和把评分信息封装到评分类中;

  

search层:
DownloadPage:表明如何把一条URL所指向的页面下载到容器content中,首先,有些页面设置防盗链,故要想获取该网站的页面信息,需要先设置代理,突破防盗链;其次建立客户端与服务器的http连接,将网页信息的输入流读入到BufferedReader缓存区中,然后再逐行加回车读入到容器content中;
UrlQueue:主要设置一个线性列表作为队列结构,其中,关键操作有:将url加入到队列中、获取url的操作是将队列的第一个元素移除并且返回该元素、清除url队列,判断url队列是否为空;
ContentMatch:1.(例如:喜剧类型的电影的第二个页面列表的展示) http://www.imdb.cn/Sections/Genre/Drama/2,从该URL所显示的页面信息来看,将其中电影名、导演名、上映日期等信息提取出来放入到数据库movies表中(注:该页面是个电影列表展示页面,故存在许多电影信息);
                           2.和1举同样的例子, http://www.imdb.cn/Sections/Genre/Drama/2 ,从该URL所链接的页面中获取后面的页面的超链接信息,并将所获取的URL加入到UrlQueue中(限制一个页面获取URL信息的起始span class=current与结束下页
                          3.(例如:电影阿甘正传的搜索页面) http://movie.douban.com/subject_search?search_text=阿甘正传,把该页面提供的信息放到容器content中作为参数传进来,另一个参数为电影名,根据页面信息提取该电影主界面(注:主界面有对该电影的评分信息)的URL并判断该URL是否属于该电影的,返回URL;
                         4.(例如:电影阿甘正传的含有短评的主页面) http://movie.douban.com/subject/1292720/,从该URL所显示的页面中,提取短评信息,主要包括用户名,评分信息并将提取的信息加入到数据库rates表中;
                         5.与4举同样的例子,把该URL所显示的页面信息进行分析,提取短评的总共条数并返回该值;
                         

engine层:
SearchDouban:1.先初始化,输入电影的初始名字和截止名字;
                             2.建立数据库连接,将数据库表movies的信息(是从imdb网站上读入的信息,现需要根据这些信息(主要是电影名)从douban网站上搜索到对应电影的短评,收集其评分数据)读入到ResultSet容器中,并且限制读入电影名的数量,还要判断该电影名是否符合数据格式,如果该电影存在,则需要在douban网站进行搜索并将其评分信息读入到数据库表rates中,并且限制读入评分的条数;
                            3.如何搜索?首先,获取搜索某电影对应的URL;其次,分析对应页面信息提取含有短评的电影URL,分析该页面提取含有更多短评的电影URL,分析该页面提取用户名和评分信息 读入到数据库表rates中 以及对应电影的短评数,在限制范围内,读入数据库中;
                             4.主函数:建立数据库连接,初始化 SearchDouban类,启动线程开始运行;
 
SearchImdb:1.初始化,主页面: http://www.imdb.cn/,分析该页面,把类别分类下的各种类别对应的URL加入到typeurls数组链表中,对应每一类别的电影进行分析;
                        2.搜索操作,限制搜索电影的个数,对于每个类别,都对应许多电影,对于每个有页面所显示的电影条数有限并且总共的电影数量也要限制,接下来分析某一类别的“电影们”。先将显示某种类型的电影列表的第一页中的电影信息加入到数据库中,并且分析该页面提取URL加入到UrlQueue队列中,如果队列不为空,逐条读取队列中的URL,将其页面下载,分析、提取、加入数据库中,如果达到限制条件,则清空队列,最后别忘记关数据库连接;
                        3.主函数:建立对象,初始化,搜索。


(终于分析完了,开始实战啦……)
注:如果需要该爬虫的源代码(Java写的),请私信




 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值