自学内容网 自学内容网

python爬虫-爬虫常用函数及其用法-1

1、urllib库

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

(1)urlopen函数

在 python3 的 urllib 库中,所有和网络请求相关的方法,都被集到 urllib.request 模块下面了.

urlopen 的函数基本的使用:

urlopen(url, data=None, timeout, proxies=None,context=None)

① url:请求的url。
② date:请求的 date,如果设置了这个值,那么将变成 post 请求。
③ 返回值:返回值是一个 http.cilent.HTTPResponse 对象,这个对象是一个类文件柄对象。有read(size)(按字节读取)、readline(读取第一行)、readlines(读取多行)以及 getcode(获取响应码)等方法。

④timeout:指定超时时间

readlines():适用于需要一次性读取整个文件内容,并且希望将每一行分别处理的场景。例如,处理文本文件时,如果文件不大,可以直接使用 readlines() 方法读取所有行,然后逐行处理。
readline():适用于需要逐行读取大文件的场景。由于每次只读取一行,因此占用内存较少,适合处理大文件。

在这里插入图片描述

使用举例

from urllib import request
resp = request.urlopen('http://www.baidu.com')
print(resp.read())   #读取相应数据

运行结果:

在这里插入图片描述在这里插入图片描述

实际上,使用浏览器访问百度,右键查看源代码,理论上应该是一样的。(但是实际上你会发现,跟我们刚才打印出来的数据不是一模一样的,由于请求包其他参数不同等原因,与实际还是有略微去区别的)。也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬取下来了。

(2)urlretrieve函数:

这个函数可以方便的将网页上的一个文件保存到本地。

request.urlretrieve("网址","下载路径及网站名称(如果没有路径就是表示当前路径)")

以下代码可以非常方便的将百度的首页下载到本地:

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

在这里插入图片描述

下载图片

from urllib import request
request.urlretrieve("https://img2.baidu.com/it/u=1337068678,3064275007&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=750","1.jpg")

在这里插入图片描述

(3)urlencode函数:

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

示例代码如下:

from urllib import parse
data={'name':'爬虫基础','greet':'hello world','age':100}
qs=parse.urlencode(data)
print(qs)

在这里插入图片描述

实际应用:

①当进行百度搜索时,如果使用中文请求会报错,此时就需要对url进行编码:

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
reap=request.urlopen(url)
print(resp.read())

在这里插入图片描述

②对中文字符进行编码

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
print(qs)

在这里插入图片描述

③编码后可以正常访问

from urllib import parse
from urllib import request
url='https://www.baidu.com/s'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
url = url + '?'+ qs
reap=request.urlopen(url)
print(reap.read())

在这里插入图片描述

(4)parse-qs函数:

可以将经过编码后的url参数进行解码

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
print(qs)
print(parse.parse_qs(qs))

在这里插入图片描述

(5)urlparse和urlsplit:

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

urlparse‌:用于完整解析URL的各个部分,包括协议、域名、端口、路径、参数、查询和锚点

urlsplit‌:不包含参数(params)字段

区别

  • 参数处理‌:urlparse能够解析URL中的参数(params),而urlsplit则不包括参数字段。如果URL中包含参数,使用urlparse更为合适。
  • 返回对象类型‌:urlparse返回一个ParseResult对象,而urlsplit返回一个SplitResult对象。尽管两者在功能上有所重叠,但返回的对象类型不同,这在进行类型检查时需要注意。

适用场景

  • urlparse‌:当你需要完整解析URL的所有部分,包括参数时,使用urlparse
  • urlsplit‌:如果你不需要解析参数部分,或者更倾向于使用不包含参数的URL解析结果,可以使用urlsplit

urlparse‌使用:

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
print(parse.urlparse(url))

在这里插入图片描述

urlsplit‌的使用

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
print(parse.urlsplit(url))

在这里插入图片描述

获取单个属性:

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
a= parse.urlsplit(url)
print("Scheme:", a.scheme)

在这里插入图片描述


原文地址:https://blog.csdn.net/lushuaibao/article/details/143877928

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!