目录
一.urllib导入
二.urllib爬取网页
三.Headers属性
1.使用build_opener()修改报头
2.使用add_header()添加报头
四.超时设置
五.get和post请求
1.get请求
2.post请求
urllib库和request库作用差不多,但比较起来request库更加容易上手,但该了解的还是要了解了解
一.urllib导入
urllib库的安装不用多说,终端命令:pip install urllib,导入方法如下:
import urllib.request
二.urllib爬取网页
urllib提供了一个打开访问网页的函数urlopen(),然后我们在本地创建一个保持该网页的文档,将该网页写入文档中,就实现了简简单单的网页源码的保存,例如保存百度的网页源码:
注意:保存文件可以用上面的方式,也可以用
urllib.request.urlretrieve(url,filename)
三.Headers属性
网页为了防止被恶意采集进行了一些反爬虫设置,设置了headers就利用模拟浏览器去正常访问,多的我们就不赘叙,设置headers属性有两个方法:
1.使用build_opener()修改报头
自己浏览器headers不会看的先自己了解,不多说,看码
import urllib.request
#访问网页的header,每个人的不一样,这个是我的
header={
'User_Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41'
}
#修改header
opner=urllib.request.build_opener()
opner.addheaders=[header]
#打开百度网页
urllib=urllib.request.urlopen('https://www.baidu.com').read()
#‘wb’以二进制格式打开文件
file=open('baidu.html','wb')
file.write(urllib)
#关闭文件
file.close()
2.使用add_header()添加报头
add_header简单多了,例如上面的代码可以改成如下:
import urllib.request
url="https://www.baidu.com"
req=urllib.request.Request(url)
#添加报头
req.add_header( 'User_Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41')
#打开百度网页
urllib=urllib.request.urlopen(url).read()
#‘wb’以二进制格式打开文件
file=open('baidu.html','wb')
file.write(urllib)
#关闭文件
file.close()
四.超时设置
如果访问一个网页,且长时间没有得到反应,这个时候超时设置就会自动断开对网页的访问,函数timeout()
#超时设置10秒
file=urllib.request.urlopen("https://www.baidu.com/",timeout=10)
五.get和post请求
HTTP请求协议有6种:GET ,POST ,PUT ,DELETE ,HEAD ,OPTIONS, 这里不解释其他四种请求了
1.get请求
GET请求:get请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递
在urllib中个get请求这样:注意请求的参数
urllib.request.Request("https://www.baidu.com/s?wd=value")
2.post请求
post请求:向服务器提交数据
对与post请求常常用在表单的提交,实现的思路是在get请求中添加要post的参数,所有要构建表单并用urllib.parse.urlencode对数据进行编码处理
例如:post登录界面部分代码:
#编码数据
postdata=urllib.parse.urlencode({
"username":"myun",
"pass":"******"
})
#将数据传入get请求
urllib.request.Request(url,postdata)
注意:再随便提提异常处理urllib.error.URLError和urllib.error.HTTPError,前者是后者的父类
urllib.error.URLError产生的原因:
1.连接不上服务器 2.远程URL不存在 3.无网络 4.触发了HTTPError
HTTPError产生主要是没有模拟浏览器访问或某些网址反爬虫技术高超