| 这阵子学的东西较杂,先说说爬虫,给自己留点资料,顺便做个总结梳理,加深印象。
什么是爬虫?
没学之前,觉得挺神秘,其实指的就是能模拟浏览器发送HTTP请求,欺骗服务器,获取响应数据的程序,理论上,凡是浏览器能做的的,爬虫也能做,比如爬取网站的图片或文字、抢票、网站投票等等。搜索引擎就是一个最大的爬虫,这种爬虫称通用爬虫,一般针对特定网站的爬虫程序,称聚焦爬虫。
要实现用程序代码去访问网站获取数据,而不是通过浏览器去做,首先要了解浏览器是如何请求及服务器是如何响应的过程,这个涉及HTTP传输协议,可以在chrome浏览器测试,实际上写爬虫的时候也离不开chrome浏览器分析请求和响应。
用户在浏览器地址栏输入url并回车,浏览器会向HTTP服务器发送HTTP请求(request),服务器接收请求后会返回响应(response),如返回用户请求的网页html数据、服务器连接状态码等,然后浏览器会对得到的html代码进行解析,如果网页中包含图片、js、css的src、href,会再次自动发出这些请求,获取相应的图片、css和js,最后浏览器将页面渲染出来。
浏览器的请求,据说有8种方式,常用的有get和post请求,一般浏览器输入url回车、超链接和图片样式js的请求为get请求,post请求最典型的如表单提交,get请求时相应的请求数据在浏览器地址栏是可见的,而post请求在地址栏是不可见的,相对更安全,此外还可以通过ajax实现get和post请求。浏览器在发送请求时,除了发送请求的url和get或post数据外,还会发送浏览器信息User-Agent、引用referer、Cookie等,这部分称请求头数据,可以在chrome浏览器的network的Request Headers查到,服务器响应的数据则可在Response Headers中看到。
Python实现爬虫大致分两个阶段,一是发送请求获取数据,二是解析提取需要的数据,还可以有进一步的数据分析或数据可视化显示数据等。
模拟浏览器发送请求和获取数据,有urllib模块、requests模块等。
解析提取数据,可使用lxml模块(xpath语法)、BeatfulSoup模块等,也可以使用正则表达式进行提取。
至于数据分析,这个问题太大太深,先略过,至于数据可视化,有matplotlib可以绘制散点图、直方图等。
还有一种使用ajax的页面数据,这种比较特殊,因为ajax的数据在页面源代码中是看不到的,ajax技术能对页面进行局部刷新,一般通过js处理出来。有一个自动化测试模块selenium,本是用来进行网站自动化测试的,可以模拟人操作页面,配合浏览器驱动,可以用来做爬虫,chrome浏览器对应的是chromedriver。
还有就是用于爬虫的框架scrapy,这个是专业级的爬虫工具,现在是数据无价的时代,有许许多多的公司都需要数据,除了买,还得爬,本篇小结到此,后面继续。 |