随着大数据时代的来临,网络爬虫显得越来越重要了,互联网中的数据是海量的,如何高效获取我们感兴趣的信息是一个重要的问题。
爬虫类型
通用网络爬虫:主要用于大型搜索引擎
比如用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关的再根据一定的排名规则进行排序后展现给用户,那么就需要尽可能多的互联网的优质网页
聚焦网络爬虫:也叫主题网络爬虫,爬取的目标网页定位在与主题相关的页面中,主要为某一类特定的人群提供服务,可以节省大量的服务器资源和带宽资源
比如要获取某一垂直领域的数据或有明确的检索需求,此时需要过滤掉一些无用的信息
爬虫的作用
市场分析:电商分析、商圈分析、一二级市场分析等
市场监控:电商、新闻、房源监控等
商机发现:招投标情报发现、客户资料发掘、企业客户发现等

认识网址的构成
一般一个网站的网址=域名+自己编写的页面,我们在访问同一网站的网页时,域名一般是不会改变的,因此我们爬虫所需要解析的就是网站自己所编写的不同页面的入口url,只有解析出来各个页面的入口,才能开始爬虫
了解网页的两种加载方法
-
同步加载:会阻止浏览器的后续处理,停止了后续的文件的解析,执行,网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),然后输出至显示器或打印机,也就是常说的渲染引擎
例如:www.itjuzi.com/company?page=1(改变page的值,网页内容会发生改变) -
异步加载:通过AJAX加载,改变网址上的参数不会使网页发生改变,浏览器在下载js的同时,同时还会执行后续的页面处理,通过解析和执行 javascript 来实现网页的动态效果。
通常情况非常耗时的处理,例如下载、处理图片、大计算等,那么肯定需要异步加载,加载完成后同步显示到列表中
例如:www.lagou.com/gongsi/(翻页后网址不会发生变化,需要找规律)
www.toutiao.com(通过鼠标滑动动态加载内容)
如何进行区分?
1、修改设置,把JavaScript由“允许”改为“阻止”,重新刷新页面,若网页正常加载,说明该网页的加载方式是同步加载,否则就是异步加载
2、网站右击查看网页源代码
(1)通常同步加载的数据能直接在网页源代码中查看到,异步加载的数据是看不到的
如:网易音乐、知乎的Python精华板块
(2)或者数据能找到但是杂乱无章的,无法通过解析工具将它匹配出来
如:知乎网站“轮子哥——vczh”

认识网页源码的构成
网页右击查看源代码,一般由三个部分组成,分别是:
- html:描述网页的内容结构(网页骨架)
- css:描述网页的排版布局
- JavaScript:动态执行语言,描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的程序

查看网页请求
以chrome浏览器为例,在网页上点击鼠标右键,检查(或者F12),选择Network,选择一个链接
请求头(Request Headers)信息详解:

响应头(Response Headers)信息详解:

理解网页请求过程
从浏览器输入网址、回车后,到用户看到网页内容,经过的步骤如下:
(1)dns解析,获取ip地址;
(2)建立TCP连接,3次握手;
(3)发送HTTP请求报文;
(4)服务器接收请求并作处理;
(5)服务器发送HTTP响应报文;
(6)断开TCP连接,4次握手。

通用的网络爬虫框架
1、挑选种子URL;
2、将这些URL放入待抓取的URL队列;
3、取出待抓取的URL,下载并存储进已下载网页库中。此外,将这些URL放入待抓取URL队列,从而进入下一循环;
4、分析已抓取队列中的URL,并且将URL放入待抓取URL队列,从而进入下一循环。

爬虫三步走
1、获取数据:Requests(第三方库)、Urllib
2、解析数据:BeautifulSoup4、Xpath、正则表达式
正则表达式使用比较困难,学习成本较高
BeautifulSoup性能较慢,相对于Xpath较难,在某些特定场景下有用
-
Xpath使用简单,速度快(Xpath是lxml里面的一种),是抓取数据最好的选择
解析数据.png
3、保存数据:Pandas库
- 本地(csv、xls)
- 数据库(Mysql、MongoDB)
