urllib库

urllib库是Python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。

1.urlopen函数

在python3的urllib库中,所有和网络请求相关的方法,都被集到urllib.request模块下面了,以下先来看下urlopen函数基本的使用。

from urllib import request
res=request.urlopen('http://www.baidu.com')
print(res.read())

上面三行代码在爬取百度首页的代码

以下对urlopen函数进行详细讲解

1.url:请求的url

2.data:请求的data,如果设置了这个值,那么将变成post请求

3.返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline、readlines以及getcode等方法。

2.urlretrieve函数

这个函数可以方便的将网页上的一个文件保存到本地。以下代码可以非常方便的将百度的首页下载到本地。

from urllib import request
request.urlretrieve('http://www.baidu.com/','baidu.html')

3.urlencode函数

用浏览器发送请求的时候,如果url中包含了中文或者其它特殊字符,那么浏览器会自动地给我们进行编码。而如果使用代码发送请求,那么就必须手动地进行编码,这时候就应该使用urlencode函数来实现。urlencode可以把字典数据转换为url编码的数据。示例代码如下:

from urllib import parse
params={'name':'张三','age':18,'greet':'hello world'}
result=parse.urlencode(params)
print(result)

结果如下:

 

4.parse_qs函数

可以将经过编码后的url参数进行解码,示例代码如下:

from urllib import parse
params={'name':'张三','age':18,'greet':'hello world'}
qs=parse.urlencode(params)
print(qs)
result=parse.parse_qs(qs)
print(result)

5.urlparse和urlsplit

有时候拿到一个url,想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlparse或者是urlsplit来进行分割。示例代码如下:

from urllib import parse
url='http://www.baidu.com/s?wd=python&username=abc#a'
result1=parse.urlparse(url)
result2=parse.urlsplit(url)
print(result1)
print(result2)

结果如下:

'urlparse'和'urlsplit'基本上是一模一样的,唯一不一样的是,'urlparse'里面多了一个'params'属性。比如有一个url为'http://www.baidu.com/s;hello?wd=python&username=abc#a',那么'urlparse'可以获取到'hello',而urlsplit不可以。

6.request.Request库

如果想要在请求的时候增加一些请求头,那么就必须使用request.Request类来实现,比如增加一个User-Agent,示例代码如下:

from urllib import request,parse
url='https://www.lagou.com/'

headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
            }

req=request.Request(url,headers=headers)
resp=request.urlopen(req)
print(resp.read())

当请求方式为post时,就得设置data值,示例如下:

from urllib import request,parse
url='https://www.lagou.com/'

headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
            }
data={
      'first': 'true',
      'pn': 1,
      'kd': 'python'
          }

req=request.Request(url,headers=header,data=data,method="Post")
resp=request.urlopen(req)
print(resp.read())

如果提示请求频繁说明它已经识别出是一只爬虫,在headers继续添加 Referer 等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值