python爬虫之urllib库学习

通过python实现对网络数据的爬取时,通常使用到urllib库,在urllib库中主要有request和parse两个模块,

urlopen

urlopen()函数用于实现对目标url的访问,例如我们对百度网址进行访问,就可以通过下面的例子

re = request.urlopen("http://www.baidu.com")
print(re.read())

上面代码就会将百度返回的消息打印出来。在这里,为了方便查看返回的消息,我们可以通过decode("utf-8)对返回的结果进行解码

urlretrieve

urlretrieve函数是将返回的结果保存在文件中,urlretrieve定义如下所示,该函数是将访问的url返回的内容保存到filename中,这里通常会批量保存图片等内容比较方便

urlretrieve(url, filename=None, reporthook=None, data=None)

urlencode

当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候,需要把一些中文甚至’/'做一下编码转换,如果不转化,则会被服务器无法认识例如我们通过百度搜索新冠状病毒关键字,通过http://www.baidu.com/s?wd=新型冠状病毒可以查看到内容,但是,如果将网址直接使用urlopen访问时,则会出现错误UnicodeEncodeError: 'ascii' codec can't encode characters,这是我们没有对新型冠状病毒进行编码导致百度服务器无法识别。

from urllib import request,parse

q = {"wd":"新型冠状病毒"}
url = "http://www.baidu.com/s?"

n_q = parse.urlencode(q)
print(n_q)
url = url +n_q
re = request.urlopen(url)
print(re.read())

在这里插入图片描述

unquote

unquote函数是对已经编码过的字符串进行解码,和urlencode是一对,下面的代码是对内容的编码和解码

q = {"wd":"新型冠状病毒"}
en_q = parse.urlencode(q)
print(en_q)
de_q = parse.unquote(en_q)
print(de_q)

在这里插入图片描述

parse_qs

urlparse

urlparse模块主要是用于解析url中的参数,返回一个包含6个字符串项目的元组:协议、位置、路径、参数、查询、片段。

url = parse.urlparse('https://i.cnblogs.com/EditPosts.aspx?opt=1')
print(url)

输出结果如下

ParseResult(scheme='https', netloc='i.cnblogs.com', path='/EditPosts.aspx', params='', query='opt=1', fragment='')

request.Request

Request类是用于模拟用户登录的,下面是通过request类在拉勾网上进行查找关于python的信息。

url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36",
    "Referer":"https://www.lagou.com/jobs/list_python"
}
data = {
"first": "true",
"pn": str(1),
"kd": "python"
}
rep = request.Request(url,headers=headers,data= parse.urlencode(data).encode("utf-8"),method="PSOT")
re = request.urlopen(url)
st = re.read().decode("utf-8")
f = open("index.html","w")
count = f.write(st)

f.close()
print(st)
print(count)

但是上面的代码执行结果是,
在这里插入图片描述
产生上面的原因是由于拉勾网的反爬机制作祟,在下节我们将通过http.CookieJar来解决这个问题。

发布了54 篇原创文章 · 获赞 9 · 访问量 1215

猜你喜欢

转载自blog.csdn.net/qq_29983883/article/details/105481707
今日推荐