首先介绍一下爬虫的基本流程(学习爬虫差不多类似于套模板,所以流程要记住)
浏览器提交请求 ---> 爬取网页代码 ---> 解析代码 ---> 储存解析内容
浏览器请求
a.发起请求
使用常用requests库
import requests
request包含:请求头和请求体,缺陷就是不能执行js和css代码
b.响应状态
200:代表成功
301:代表跳转
404:文件不存在
403:无权限访问
502:服务器错误
c.网页结构
<html> //包含的是网页结构
<head> //包含的是头部内容以及js和css的内嵌样式
<meta charset="utf-8">
<title></titile> //包含的是标题
</head>
<boby>
//包含的是大部分具体内容,比如说盒子表单装的内容
</boby>
</html>
正式开始实操
首先介绍socket库使用
建立客户端TCP连接
import socket #导入库
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立TCP连接
s.connet('ip地址',端口) #连接服务器
print(s.rev(1024).decode('utf-8')) #查看是否成功连接
for data in [b'tom',b'jerry']:
s.send(data)
print(s.rev(1024).decode('utf-8')) #发送数据并返回结果
s.send(b'exit')
s.close() #发送退出信息断开连接
建立客户端UDP连接
import socket #导入库
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立TCP连接
for data in [b'tom',b'jerry']:
s.sendto(data,('ip地址',端口))
print(s.rev(1024).decode('utf-8'))
s.close() #返回结果
介绍urllib3,rquests库使用
import urllib3 #老规矩使用什么导入什么
http = urllib3.PoolManager() #创建PoolManager()实例
rq = http.request('GET','ip地址或者绝对地址') #通过rquest函数创建请求,使用get方法
print('查看响应码:',rq.status)
print('查看响应实体:',rq.data)
timeout设置
作用:为了防止网络、服务器不稳定造成连接时的丢包,其设置有三种方法
方法1:直接在url参数之后添加统一的timeout参数
url='ip地址或者绝对地址'
rq=http.request('GET',url,timeout=3.0)
方法2:分别设置连接与读取timeout参数
rq=http.rquest('GET',url,timeout=urllib3.Timeout(connect=1.0,read=3.0))
方法3:在poolmanager实例中设置
http = urllib3.PoolManager(timeout=4.0)
rq=http.rquest('GET',url,timeout=urllib3.Timeout(connect=1.0,read=3.0))
生成完成的http请求
1.urllib3实现 2.requests实现
1.urllib3实现
http = urllib3.PoolManager() #创建实例
url = '网址' #请求目标
ua = {'User-Agent'} #这个打开网页f12查看复制,自己打容易错
tm = urllib3.Timeout(connect = 1.0 ,read = 3.0) #设置超时时间
rq = http.request('GET',url,headers=ua,timeout=tm,retries=5,redirect=4) #retries设置重试次数
print('服务器响应码:',rq.status)
print('获取内容:',rq.data.decode('utf-8'))
2.requests实现
import rquests
url = '网址'
rqg = requests.get(url)
print('结果类型:',type(rqg))
print('状态码:',rqg.status_code)
print('编码:',rqg.encoding)
print('响应头:',rqg.headers)
print('网页内容:',rqg.text)