当前位置: 首页 > 科技观察

如何使用Python请求网络资源

时间:2023-03-16 19:53:54 科技观察

我们一直在分享Linux系统相关的知识,所以有些朋友可能会误以为我们只分享Linux操作相关的东西。感觉有些问题可以总结一下,也可以分享一下。最近在写一个定时访问网络资源的程序,其中涉及到使用python访问网络,所以今天就对这一点做一个简单的总结。使用python访问网络资源要访问网络上的资源,有的朋友可能会用到urllib.request,它也是一个python标准库。但是我们用的是requests,它是对urllib.request的一个封装,使用起来比较方便。如果您是第一次使用它,则需要安装请求。我们使用pip来安装:pipinstall--userrequests安装成功后就可以直接使用了。使用时需要在python文件上面导入:importrequestsimportrequests为了方便演示,我们使用requests模块访问github上star最高的python项目,地址为:https://api.github。com/search/repositories?q=language:python&sort=stars为了有个整体的了解,可以先用浏览器打开这个地址,看看里面的内容,是json格式显示的文本。然后我们创建一个test-resp.py文件,在里面输入如下代码:importrequestsurl='https://api.github.com/search/repositories?q=language:python&sort=stars';get_resp=requests.get(url);上面代码中,第一行引入了requests模块,第二行将要访问的地址存储在url变量中,第三行使用requests模块的get方法访问url并将response存储在变量get_resp。此响应是一个包含所请求资源的内容和状态的对象。你可以打印这个响应的状态,使用status_code对象,如下代码:print(get_resp.status_code)结果如下:$pythontest-resp.py200当然你也可以打印出文本的响应,即打印get_resp。text,但是这段文字没有格式化,不便于阅读,如下图:上图中我们只截取了部分结果,因为太长了。。。这个结果解析起来比较麻烦,不过完全不用担心,只要看一下它的内容,我们可以注意到它的内容是json格式的,所以响应结果也是json,而python对json的解析非常强大,如下我们可以打印出这个json的key值:print(get_resp.json().keys())结果如下:$pythontest-resp.pydict_keys(['total_count','incomplete_results','items'])从上面的结果我们可以知道,我们可以将这个响应结果作为一个json对象来处理。比如上面结果中第一个keyi值total_count表示python仓库的总数。我们可以这样打印这个值:response_dict=get_resp.json();print("Totalrepositories:",response_dict['total_count'])其运行结果如下:$pythonTest-resp.pyTotalrepositories:9128125如果读取的网络资源是常见的html格式,可以使用第三方库BeautifulSoup,可以完美解决html解析。上一篇我们也介绍了BeautifulSoup,可以参考:使用Python的BeautifulSoup库分析网页添加请求头信息有些网络资源可能对请求的响应有限制,比如阻止机器人(程序)访问,或者您需要登录(使用用户会话)才能访问。为此,可以在请求中添加请求头,在请求头中模拟浏览器,添加用户会话信息(token)等。像这样:headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/64.0.3282.186Safari/537.36','Authorization':'41d15146-c3f3-4c0b-b48b-b5210151a9df'}get_resp=requests.get(url,headers=headers,params=None)上面代码中headers对象中的User-Agent为模拟的浏览器信息,Authorization为请求令牌。还可以根据需要添加其他请求头信息,如下:header={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8','Accept-Encoding':'gzip,deflate,sdch','Accept-Language':'zh-CN,zh;q=0.8','Connection':'keep-alive','User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/43.0.235'}我们上面使用的其他例子都是get请求,同样适用于post请求,使用requests的post方法是如下:post_resp=requests.post(url,headers=headers,data=None,json=None)的使用方式和get请求完全一样。以上就是我们这次分享的全部内容,欢迎讨论。