python爬虫学习笔记(二)——基础篇之爬虫基本原理
1.什么是爬虫?
请求网站并提取数据的自动化程序
2.爬虫基本流程
2.1发起请求
通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers等信息,等待服务器响应;
2.2获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML, Json字符串,二进制数据(如图片视频)等类型;
2.3解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析;可能是Json,可以直接转为Json对象解析;可能是二进制数据,可以做保存或者进一步的处理。
2.4保存数据
保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
3.什么是Request和Response?

- 浏 览 器 发 送 消 息 给 该 网 址 所 在 的 服 务 器 , 这 个 过 程 叫 做 HTTP Request;
- 服 务 器 收 到 浏 览 器 发 送 的 消 息 后 , 能 够 根 据 浏 览 器 发 送 消 息 的 内 容 , 做 相 应 处 理 , 然 后 把 消 息 回 传 给 浏 览 器 。 这 个 过 程 叫 做 HTTP Response;
- 浏 览 器 收 到 服 务 器 的 Response 信 息 后 , 会 对 信 息 进 行 相 应 处 理 , 然后 展 示 。
3.1request中包含什么?
3.1.1请求方式
主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等
- GET:请求的参数已经包含在请求的网址上,网页网址栏,url后的一长串信息就是GET的参数;可以直接输入URL回车访问
- POST:请求的信息在FORM DATA中;构造表单信息,提交后请求(如登陆)
3.1.2请求URL
URL全程:统一资源定位符,如一个网页文档、一张图片、一个视频都可以用URL唯一确定
3.1.3请求头
包含请求时的头部信息,如User-Agent、Host、Cookies等信息;
包含一些比较重要的配置信息
3.1.4请求体
请求时额外携带的数据,如表单提交时的表单数据
3.2.Response
3.2.1响应状态
有多种相应状态,如200代表成功、301跳转、404找不到页面、502服务器错误
3.2.2响应头
如内容类型、内容长度、服务器信息、设置cookie等等
3.2.3响应体
最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等
3.3程序演示
通过request请求,得到response,判断相应状态,成功获取响应体
import requests
response=requests.get('http://www.baidu.com')
if response.status_code==200:#成功
re_text=response.text
re_head=response.headers
print(re_text.encode(encoding='utf-8'))#响应体,这里注意编码
print(re_head)#响应头
4.可以抓怎样的数据?
网页文本
如HTML文档、Json格式文本等
图片
获取的是二进制文件,保存为图片格式
【示例】
1 #requset获取
import requests
response=requests.get('https://www.baidu.com/img/bd_logo1.png')
#print(response.content) with open('baidu.png','wb')asf:
f.write(response.content)
f.close()
视频
同为二进制文件,保存为视频格式即可
其他
只要是能请求到的,都能获取
5.怎样来解析
直接处理
网页本身构成简单,返回内容简单,比如可能返回就是一个最简单的字符串,简单处理去除头尾空格即可
Json解析
正则表达式
BeautifulSoup库解析
PyQuery库解析
XPath库解析
6.为什么抓取数据与获得数据不同?
request只得到源代码(相当于加密过后的):包括js、jss
js、jss后续加载起来后,后台会获取数据,渲染后才会变成我们看到的网页----我们要获取的
7.怎样解决JavaScript渲染的问题?
分析Ajax请求;
Selenium/webdriver;
Splash; ----------后三个模拟加载JS
PyV8、Ghost.py
8.怎样保存数据?
文本
纯文本、Json、XML
关系型数据库
MYSQL、Ocacle、SQL Server
非关系型数据库
MongoDB、Redis等Key-Value形式存储
二进制文件
图片、视频、音频
python爬虫学习笔记(二)——基础篇之爬虫基本原理的更多相关文章
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- Python 学习笔记(基础篇)
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...
- mysql学习笔记之基础篇
数据库学习之基础篇 ① 开放数据库互连(Open Database Connectivity,ODBC ② 结构化查询语言(Structured Query Language) ③ 进入mysql:M ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- Python学习笔记之基础篇(二)python入门
一.pycharm 的下载与安装: 使用教程:https://www.cnblogs.com/jin-xin/articles/9811379.html 破解的方法:http://xianchang. ...
- https学习笔记二----基础密码学知识和python pycrypto库的介绍使用
在更详细的学习HTTPS之前,我也觉得很有必要学习下HTTPS经常用到的加密编码技术的背景知识.密码学是对报文进行编解码的机制和技巧.可以用来加密数据,比如数据加密常用的AES/ECB/PKCS5Pa ...
- Python学习笔记之基础篇(三)python 数据类型 int str bool 详谈
python 的数据类型: 1.int:存放 1,2,3 等数据 ,用于数字的运算 2.bool :True, False 用于判断 3.str:字符串,用来存储少量的数据 4.list : 数组的 ...
- Python学习笔记之基础篇(五)字典
#数据类型划分:可变数据类型 不可变数据类型 #不可变数据类型 : 元组 bool int str --> 可哈希 #可变数据类型 list ,dict set --->不可哈希 ''' ...
随机推荐
- Sublime Text 3利用Snippet创建Getter和Setter
1. Tools -> Developer -> New Snippet. 2. 复制以下内容并保存: <snippet> <content><![CDATA ...
- Java学习笔记(7)
File类用于处理文件和目录 isDirectory()用于检查当前对象是否目录,isFile()用于检查当前对象是否文件 构造File对象时,传入的路径不一定要求存在,要通过exists()方法判断 ...
- 网易2019校招内推编程题-俄罗斯方块-C++实现
[编程题] 俄罗斯方块 时间限制:1秒 空间限制:262144K 小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块.因为它比较古老,所以规则和一般的俄罗斯方块不同.荧幕上一共有 n 列,每次都会有 ...
- 2018-软工机试-F-庙会
单点时限: 1.0 sec 内存限制: 256 MB 是谁带你来看这场庙会 行为掩饰后超越了思维 舞台上的小丑和你的左小腿 别管我,别把我和他们扯在一起 ——李志<鸵鸟> 来到这场庙会,现 ...
- ios外部链接或者app唤起自己的app
唤起自己的app,其实都是通过链接,关于这个需要了解下scheme,自己和调用方对接下协议,这里只是说明下到自己app指定页的问题 唤起自己的app分为两种情况 一.自己的app已经启动,那么唤起自己 ...
- scrapy学习笔记之hello world
1. 创建项目文档 在目标路径下,打开命令行,使用如下命令创建项目,例如项目名称为 "tutorial": scrapy startproject tutorial - 创建项目时 ...
- 在Eclipse中使用版本管理工具SVN
近日工程中,逐渐感觉到原来复制粘贴代码的笨重,突然想起以前有人和我说起过Git和SVN之类的版本管理工具.由于平时主要是写Java代码,所以能够在Eclipse中使用SVN工具进行版本管理就可以说是很 ...
- Android IPC机制基础
概要 多进程概念及多进程常见注意事项 IPC基础:Android序列化和Binder 跨进程常见的几种通信方式:Bundle通过Intent传递数据,文件共享,ContentProvider,基于Bi ...
- npm install详解
package.json中dependencies和devDependencies的部分都会被安装,区别在于前者用于生产环境,后者用于开发环境-g 表示全局安装,通常用于安装脚手架等工具–save(- ...
- pdf.js 使用实例(app直接预览pdf格式的文档)
pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责 ...