一、简介
大量数据的获取难以手动实现,需借助爬虫程序
网络爬虫是一个自动在网上抓取数据的程序
爬虫本质上就是下载特定网站网页的HTML/JSON/XML数据,并对数据进行解析、提取与存储
通常先定义一组入口URL,根据页面中的其他URL,深度优先或广度优先的遍历访问,逐一抓取数据
二、载入
载入:将目标网站数据下载到本地
Html,HyperText Markup Language
爬虫程序向服务器发送网络请求 Request,获取相应的网页
·网站常用网络协议:http,https
·数据常用请求方式:get,post
get:参数常放置在URL中
http://www.adc.com?p=1&q=2&r=3,(示例网址,无实际意义)
问号后为参数
post:参数常放置在一个表单中(报文头(header))
在向目标URL发送请求时,将参数放置在一个网络请求的报文头中 更安全
实际操作:抓取一个静态网页步骤
首先确定URL,例如:百度一下,你就知道全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。http://www.baidu.com
其次确定请求的方式以及相关参数:
直接用浏览器实现:chrome, firefox浏览器抓包工具,详见
http://jingyan.baidu.com/article/3c343ff703fee20d377963e7.html
或者抓包工具:charles等,详见
http://blog.csdn.net/jiangwei0910410003/article/details/41620363/
最后在代码中按照特定的请求方式(get,post)向URL发送参数,即可收到网页的结果

但部分页面的数据是动态加载的
Ajax异步请求
网页中的部分数据需要浏览器渲染 (JavaScript调用接口获取数据)
用户的某些点击、下拉的操作触发才能获得
解决方案:
借助抓包工具,分析Ajax某次操作所触发的请求,通过代码实现相应的请求
·有技术难度,但抓取速度快。
利用智能化的工具:selenium webdriver
·用程序控制驱动浏览器,模拟浏览器
·可以模拟实现人的所有操作
·操作简单,但是速度慢
因为爬虫需要启动浏览器,浏览器需要渲染页面,所以速度比较慢
其他:Splash,Pyv8等
反爬虫:随着网络爬虫对目标网站访问频率的加大,网站禁止爬虫程序继续访问
常见反爬手段:
出现用户登录界面,需要验证码
禁止某个固定帐号或ip一段时间内访问网站
更有甚者,直接返回错误的无用数据
应对措施:
优化爬虫程序,尽量减少访问次数,尽量不抓取重复内容
使用多个cookie(网站用来识别用户的手段,每个用户登录会生成一个cookie)
使用多个ip(代理实现)
三、解析
解析:在载入的结果中抽取特定的数据,载入的结果主要分成三类html、json、xml 结构化方法用以标记数据
html
Java工具包:jsoup等
Python工具包:beautifulSoup等
json
Java工具包:json-lib、org-json、jackson等
Python工具包:json、demjson等
Xml
Java工具包:dom4j等
Java工具包:xml、libxml2等


可读性
Json简洁,XML规范,xml比较好
可扩展性
均很好
数据体积
Json数据量少,传输快。Xml数据量大,传输慢
编码解码
Json容易,xml复杂(树结构,父子节点)
数据描述
Xml数据描述更好
数据交互
Json与JavaScript交互更方便,易于解析。XML更适合跨平台共享

抓取单博主的所有微博及其评论
浏览器开发者工具基本使用教程
现有的技术:
基于Java的工具
HttpClient
Jsoup
基于Python的工具
网页爬取URLLIB库(无需安装)
网页解析Beautiful-soup库
网页爬取+解析Scrapy框架(需要安装)
再次不多赘述这些库的使用方法,感兴趣的朋友可以去选择一种库,具体研读其实现的方法。
四、存储
此内容因人而异,看你想要存储什么,用来干嘛。
学过基础python内容的应该没什么问题,学过pandas等库的自然更好。
常见的存储格式:txt,csv,DataFrame...
下一讲详细展开:
【数据分析3:Data Storage】数据存储
五、协议
域名 + /robots.txt
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉爬虫哪些页面可以抓取,哪些页面不能抓取。