【数据分析二:Data Collection】网络爬虫

发布于:2025-06-18 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、简介

大量数据的获取难以手动实现,需借助爬虫程序

网络爬虫是一个自动在网上抓取数据的程序

爬虫本质上就是下载特定网站网页的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不同的格式

可读性

        Json简洁,XML规范,xml比较好

可扩展性

        均很好

数据体积

        Json数据量少,传输快。Xml数据量大,传输慢

编码解码

        Json容易,xml复杂(树结构,父子节点)

数据描述

        Xml数据描述更好

数据交互

        Json与JavaScript交互更方便,易于解析。XML更适合跨平台共享

获取到这些json等格式数据后,解析出你想要的文字
可参考:

抓取单博主的所有微博及其评论

https://zhuanlan.zhihu.com/p/26793251

现有的技术:

基于Java的工具

        HttpClient

        Jsoup

基于Python的工具

        网页爬取URLLIB(无需安装)

        网页解析Beautiful-soup库

        网页爬取+解析Scrapy框架(需要安装)

再次不多赘述这些库的使用方法,感兴趣的朋友可以去选择一种库,具体研读其实现的方法。

四、存储

此内容因人而异,看你想要存储什么,用来干嘛。

学过基础python内容的应该没什么问题,学过pandas等库的自然更好。

常见的存储格式:txt,csv,DataFrame...

下一讲详细展开:

【数据分析3:Data Storage】数据存储

五、协议

域名 + /robots.txt

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉爬虫哪些页面可以抓取,哪些页面不能抓取。

用户协议/版权声明/法律条款
爬取之前一定注意以上内容,防止违法!

网站公告

今日签到

点亮在社区的每一天
去签到