-
Notifications
You must be signed in to change notification settings - Fork 22
爬虫 && 数据分析
1、有正文抓正文
2、类似hao123一样的网站,抓网页链接
3、微博一类,一条一条的消息,文字在脚本里面的,从脚本里面抓消息集合
设置起点网址
http发送请求
服务器处理请求,返回
对返回结果HTML进行解析:
去掉广告,得到正文、发布时间、消息来源等有效信息
通过正则表达式等方式提取信息
分词处理,存入数据库+文件
将网址中的链接根据既定规则存入带爬取列表
统计分析,数据挖掘
1、如果需要翻墙,建立代理库
2、建立两个列表,已爬、未爬的网站,避免重复爬
进化:当开了N多个爬虫之后,采用Redis Desktop Manager(NoSql方案)
两个DB,爬虫不断向DB A存入需要爬的网址(每个存入的网址用MD5码标记),存入一个网址前,检索MD5码查重,如果重复则不存
DB B存入已经爬过的网址(不删除DB A中网址,只标记已经爬过)
3、控制爬行的宽度
如果是链接很多的页面,单个页面控制抓取网页个数
设置好的主域名外的网址是否爬
设置一些域名的不爬:排除一些网页,比如help/about,可以设置为网站-排除的关键字
4、控制爬行的深度
一个网址,往下挖几个网址
5.设置正则表达式筛选、信息发布时间范围、爬虫线程数、没连接上网址是否重试等条件
6.设置分布式爬虫,提高效率
方案1:模拟登陆
这里涉及模拟请求、验证码等问题
方案2:用第三方浏览器登录
爬虫去调用浏览器的Cookie(SQLite存储),建立字典,不用登陆
在请求的head中加入Cookie,登录对应网站
浏览器推荐火狐、360,谷歌有加密,IE的Cookie不全
Cookie在html的head中
对象序列号持久化,保存文件(.dat-二进制;.xml;.txt;Json均可)
基本思路是使用代理IP消息池,隔一段时间换一个IP
其他方法:
请求延时;
少量线程去做->保证单时间请求总量不超过XXX,并且频率低
类似w3school在线测试的功能,有些用javascript才能“看”的网页,在爬虫提取的时候,需要用js先生成正确的网页再处理
利用:phantomjs.exe 在程序中调用,并返回结果
1、假设爬取了20万网页回来
2、根据设置的主题词(比如:医疗、百度、事故),抽出相关的网页5万
3、抓出5万网页中的热词
4、热词组成热词组,并分析热度
5、对热词组进行处理,将一个话题的热词组进行合并(得到关键词集合)
比如:
热词:百度、魏则西、莆田、竞价排名、股票大跌
热词组:百度-魏则西、莆田-魏则西、百度-竞价排名、百度-股票大跌、百度-莆田、魏则西-股票大跌
关键词集合:
第1组:百度魏则西;百度莆田;莆田魏则西
第2组:百度竞价排名
第3组:百度股票大跌;魏则西股票大跌
6、统计分析
1、两个热词组的热度之比<一个0~1之间的数值,如果二者热度不是一个数量级,不合并(多半不是一个事件)
2、热词提取个数
......