爬虫基本原理
爬虫定义:
请求网站并提取数据的自动化程序
爬虫基本流程:
- 发送请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
- 获取响应内容是:如果服务器能正常响应,会得到一个Response,Response的内容便是所获取的页面内让那个,类型可以是HTML,Json字符串,二进制数据(如图片视频等类型。
- 解析内容:得到的尽可能是HTML,可以用正则表达式,网页解析库进行解析。可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
- 保存数据:存为文本,也可以保存到数据库,或者指定的格式。
Request包含什么:
- 请求方式:GET/POST
- 请求URL(统一资源定位符),一个网页文档,一张图片,一个视频
- 请求头:User-Agent、Host、Cookies等
- 请求体(POST请求时使用) -- form data,请求时额外携带的数据,如表单提交时的表单数据
Response包含:
- 响应状态 -- 状态码
- 响应头:内容类型、内容长度、服务器信息、设置cookie
- 响应体:请求资源的内容如网页HTML、图片、二进制数据等。
能抓什么数据:
- 网页文本:HTML, Json格式文本等
- 图片:获取到的是二进制文件,保存为图片格式
- 视频:同为二进制文件,保存为视频格式
- 其它:只要是能请求到的,都能获取
解析方式:
- 直接处理
- json解析 -- 网页是ajax加载的
- 正则表达式
- BeautifulSoup解析库
- PyQuery解析库
- XPath解析库
抓到的数据和浏览器看到的不一样:
存在javascript渲染问题,即看到的网页是经过JS渲染过的网页,而直接请求的没有经过渲染得到的
解决JavaScript渲染问题:
- 分析Ajax请求
- Selenium / WebDriver模仿JavaScript渲染
- Splash模拟JavaScript渲染
- PyV8/Ghost.py
怎样保存数据
- 文本
- 关系型数据库:MySQL、Oracle、SQL Server
- 非关系型数据库:MongoDB、Redis等Key-Value的形式
- 二进制文件:图片视频音频等直接保存