-
客户端与服务器的网页通信简单原理:
客户端向服务器发送一个请求,服务端对该客户端的请求进行解析,然后服务端向客户端发送出一个响应,而后客户端对该响应进行解析,然后就解析出用户所看到的网页。 -
请求与响应:
请求:请求方法(get、post(与需要用户登录的网页有关)),请求头,请求 URL,请求体(与需要用户登录的网页有关)。
响应:响应体(html代码爬虫重点分析对象),响应头、响应码(根据它可以 判断服务器的情况,如 200 代表请求成功)
3.爬虫基本流程:
发起请求-->获取响应内容-->解析内容-->保存数据
请求:
一般爬虫都会加上请求头.
解析内容:
解析html数据:用正则表达式和第三方解析库解析。
解析json数据:用json模块解析。
解析二进制数据:以wb的方式写入文件。
存储:
数据库、文件
4.python3请求库:
(1)urllib库(python内置的HTTP请求库)
它有4个模块:
request:最基本的HTTP请求模块。
error:异常处理模块,如果出现请求错误,我们可以捕获这些异常,
然后进行重试或其他操作以保证程序不会意外终止。
parse: 一个工具模块,提供了许多URL 处理方法,比如拆分、解析、合并等。
robotparser :主要是用来识别网站的robots.txt 文件,然后判断哪些网站可以爬,
哪些网站不可以爬,它其实用得比较少。
request请求模块使用
import urllib.request
#返回一响应对象
response=urllib.request.urlopen("https://zhidao.baidu.com/question/539674215.html")
#打印响应对象类型和响应码。根据响应码可判断服务器的状态
#print(type(response),response.status)
#打印响应头信息
#for a in response.getheaders():
# print(a)
#传入一个"Server",获取响应头的Server值,
# 该值代表服务器用什么搭建的。
#print(response.getheader("Server"))
#返回二进制数据对象(html内容)
#html=response.read()
#print(type(html))
#网页的编码格式确认:可以用浏览器打开需抓取的网页url,
# 打开开发者工具,找到html下<head> charset="gbk" </head>,"gbk"为编码格式之一
#对二进制数据解码。解码格式一定要与抓取网页的编码格式对应
#print(html.decode("gbk"))
向request请求模块传递参数
"""
import urllib.parse
import urllib.request
#传递了一个参数word,值是hello,它需要被转码成bytes(字节流)类型。
# 其中转字节流采用了bytes()方法
#urllib.parse 模块里的urlencode()方法来将参数字典转化为字符串.
# 第二个参数指定编码格式
data = bytes(urllib.parse.urlencode({'word':'hello'}), encoding="utf-8")
#如果传递了这个参数(data),则它的请求方式就不再是GET 方式,而是POST 方式。
response= urllib.request.urlopen('http://httpbin.org/post',data=data)
#我们传递的参数出现在了form 字段中,这表明是模拟了表单提交的方式,
# 以POST 方式传输数据。
print(response.read().decode("utf-8"))
"""
import urllib.request
#timeout 参数用于设置超时时间,单位为秒,
#意思就是如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常。
response = urllib.request.urlopen('http://h