爬虫基本原理
基本流程
- 发起请求
- 经过http库向目标站点发起请求,即发送一个Request,请求能够包含额外的headers等信息,等待服务器响应
- 获取响应内容
- 若是服务器能正常响应,会获得一个Response,Response的内容即是所要获取的页面内容,类型可能有HTML,json字符串,二进制(如图片视频)等类型。
- 解析内容
- 获得的内容多是HTML,能够用正则表达式,网页解析库进行解析,多是Json,多是二进制数据,能够作保存或者进一步处理
- 保存数据
- 保存形式多样,能够存为文本,也能够保存至特定格式的文件。
Request与Response
- Request
- 浏览器就发送消息给该网址所在的服务器,这个过程叫HTTP Request
- 请求方式
- 主要有GET,POST两种类型,HEAD,PUT,DELETE,OPTIONS等
- 请求URL
- URL全称统一资源定位符,如一个网页文档,一张图片,一个视频等均可以用URL惟一来肯定
- 请求头
- 包含请求时的头部信息,如User-Agent,Host,Cookies等信息。
- 请求体
- Response
- 服务器收到浏览器发送的消息后,可以根据浏览器发送消息的内容,而后把消息回传给浏览器。这个过程叫HTTP Response
- 响应状态
- 有多种响应状态,如200表明成功,301跳转,404找不到页面,502服务器错误
- 响应头
- 如内容类型,内容长度,服务器信息,设置cookie等等
- 响应体
- 最主要的部分,包含了请求资源的内容,如HTML,图片,二进制数据等。
抓取的数据
- 网页文本: 如HTML文档,Json格式文本
- 图片:获取的是二进制文件,保存为图片格式
- 视频:同为二进制文件,保存视频格式便可
- 其余:只要是能请求到的,都能获取
解析方式
- 直接解析
- Json解析
- 正则表达式
- BeautifulSoup: 比正则更好用,更迅速,更快
- PyQuery
- XPath
抓到的数据和浏览器显示不一致
请求到的页面中包含了一些js脚本javascript
解决JavaScript渲染问题
- 分析Ajax请求
- Selenium/WebDriver
- Splash 模拟javascript渲染 github开源
- PyV8,Ghost.py
保存数据
- 文本: 纯文本,json,xml等
- 关系型数据库: 如mysql,oracle,SQL Server等具备结构化表格形式存储
- 非关系型数据库:如Mongodb,Redis等key-value形式存储
- 二进制文件: 如图片,视频,音频等直接保存称特定格式便可