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 --->不可哈希 ''' ...
随机推荐
- dos脚本》
如上图,我们只要在dos界面中输入各种dos命令,即可实现相应的命令,下面分享下dos命令大全:net use ipipc$ " " /user:" " 建立I ...
- commons-dbcp2 新版本2.6使用连接池在关闭服务器的时候会有内存溢出的BUG....
这是异常信息.本人使用的mysql8.0数据库驱动版本mysql-connector-java Version 8.0.11,发生这种情况的原因主要是Dbcp2的XBasicDataSource在关闭 ...
- 再见了,我最爱的OI~~~
唔,迟到了三个月的感言呢. 我就这样离开OI了,成为了一个退役的OIer,当年高一的时候还觉得自己有很多时间,没想转眼间自己就退役了.呵呵,来到OI 从没有在这个世界带起一丝风浪,也没有拿到一个满意的 ...
- java利用itext导出pdf
项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf.在网上查可以用那些方式导出pdf,用itext比较多广泛. 导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行 ...
- C#递归遍历窗体所有textbox控件并设置textbox事件的方法
/// <summary> /// /// </summary> /// <param name="sender"></param> ...
- webpos登录不上
jo=new JSONObject(((java.sql.Clob)s).getSubString(1, (int) ((java.sql.Clob)s).length()));
- web3js 进行转账
1.准备阶段 部署以太坊geth 安装nodejs npm install web3 npm install npm install ethereumjs-tx 其中, web3是1.0.0.beta ...
- 【EMV L2】Processing Restrictions
目的: 处理限制(Processing Restrictions)的目的是确定终端中的应用程序与ICC中的应用程序的兼容程度,并进行任何必要的调整,包括可能拒绝交易. 执行条件: 终端应该都要执行Pr ...
- Bellman-Ford算法(在边权可正可负时求最短路)
使用FIFO队列实现: bool bellman_ford(int s){ queue<int > Q; memset(inq,0,sizeof(inq)); memset(cnt,0,s ...
- Tomcat中的Connector配置
所有的Connector提供的配置项(不完全版scheme, isSecure, xpoweredBy, useIPVHosts ): allowTrace 如果需要服务器能够处理用户的HAED/TR ...