python返回技巧_Python 小技巧

不知道为什么之前的发文为什么变成404了,本人也没有备份文章,只好在这里重打了。

我们开始我们的编程之旅,首先我们新建一个 spider.py 文件,开始敲写代码。

import requests

def get_response(url):

"""

封装一个 get 请求 的 函数

"""

res = requests.get(url)

return res

if __name__ == "__main__":

url = "https://www.baidu.com"

res = get_response(url)

print(res.text) # 打印 res 的文本内容

这个代码很简单,使用 requests 封装了一个 可以发送 get 请求的函数。

三元表达式

在这里我们有一个小小的需求,如果 res 的响应状态码是 200 我们才返回 res 否则 返回 None。代码如下

import requests

def get_response(url):

"""

封装一个 get 请求 的 函数

"""

res = requests.get(url) # 发送一个 get 请求

# res.status_code 返回为int型 获取响应状态码

return res if res.status_code == 200 else None

#res 的响应状态码是 200 我们才返回 res 否则 返回 None

if __name__ == "__main__":

url = "https://www.baidu.com"

res = get_response(url)

if res:# 判断 res 是否None 不是 则打印 res.text

print(res.text)

这里我们通过在 return 中使用 if else 来实现了我们需求,这种用法叫做 三元表达式。

完善我们的需求

我们知道 response 的状态码是以 "2" 开头一般正常响应了我们,但是只是用res.status_code == 200 来判断,我们并没有考虑201,202 等响应码,如果是这些响应码我们应该也要返回 res 的。我们需要再次维护我们的代码。

import requests

def get_response(url):

"""

封装一个 get 请求 的 函数

"""

res = requests.get(url) # 发送一个 get 请求

# res.status_code 返回为int型 获取响应状态码

return res if str(res.status_code).startswith("2") else None # 使用startswith 方法

if __name__ == "__main__":

url = "https://www.baidu.com"

res = get_response(url)

if res:# 判断 res 是否None 不是 则打印 res.text

print(res.text)

这里我们使用 startswith 来判断我们的 status_code 是否是以 "2"开头。startswith 方法需要字符串才能使用,所以我们需要将 status_code 类型转换为字符串 ,str(res.status_code),然后我们调用 startswith 传入 "2",如果 字符串是以 "2" 开头则返回 True,否则 返回 Flase,这样我们就完成了我们的需求。这里注意一下 startswith 方法,很多地方如果使用这个方法我们会很方便,同样 python 字符串也提供了 endswith方法 用来判断是字符串结尾的,用法和 startswith 一样。

添加 User-Agent

我们运行上面的代码打印了一下 百度首页的源代码,我们发现我们打印的源代码和我们浏览器查看百度的源代码相比有点少啊。我们在这里选择使用 添加 User-Agent的方式解决这个问题。

import requests

def get_response(url):

"""

封装一个 get 请求 的 函数

"""

test_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}

res = requests.get(url,headers=test_headers) # 发送一个 get 请求

# res.status_code 返回为int型 获取响应状态码

return res if str(res.status_code).startswith("2") else None

if __name__ == "__main__":

url = "https://www.baidu.com"

res = get_response(url)

if res:# 判断 res 是否None 不是 则打印 res.text

print(res.text)

这里百度有一个简单的反爬,它会判断我们的 headers 中的 User-Agent 是否是正常的浏览器的 User-Agent,我们只要添加 headers 并且 headers 中有 User-Agent 即可。注意headers 需要声明成字典,我们用过浏览器的抓包功能获取 浏览器的 User-Agent。这里放个图

解析User-Agent

User-Agent 里面的信息其实有很多,比如 电脑的操作系统类型,设备类型,浏览器类型等。

这里我们使用 pip install user-agents安装一下 user-agents 这个 python 第三方的包。我们将使用它来解析 User-Agent。代码如下:

from user_agents import parse

if __name__ == "__main__":

ua_text= "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

user_agent = parse(ua_text)

browser_type = user_agent.browser.family # 获取浏览器类型

print(browser_type)

os_type = user_agent.os.family # 获取操作系统类型

print(os_type)

device_type = user_agent.device.family

print(device_type) # 获取设备类型

通过 user-agents 这个包我们可以解析 User-Agent,一些网站通过 User-Agent 的信息,来判断我们是什么操作系统进而提供给我们不同的服务,比如我们的 Pycharm 官网,我们在下载 Pycharm 时,无论我们是 linux 操作系统,还是 windows 系统,它都会自动让我们下载Pycharm,这便是 User-Agent 的应用。

一个尴尬的错误

我在敲这个代码的时候,我的python文件名是 http.py,我的代码如下:

import requests

if __name__ == "__main__":

pass

但是它却抛出了错误,原因其实很简单,因为我的文件名和Python的http 包重名,而且 我还导入了 requests 这个包,requests 是需要调用 http 这个包的,这就导致了 requests 调用了我们的 http.py,然后 GG 的报错了。解决办法: 将文件名修改即可。 这件事情告诉我们敲代码的时候 文件名,变量名起名需要注意一下,否则会出现一些尴尬的报错。

python快速入门实战课程_腾讯课堂​ke.qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值