Python爬虫学习记录- httpx库的使用

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

今天接着读崔老师的书前面已经学习过了urllib跟requests库了,还有正则表达式的基本用法了,今天学一个支持HTTP/2.0协议访问的库,httpx

示例展示

书上给举了这个例子 spa16.scrape.center/ 这应该是崔老师自己的站点,自己做的样例,强烈推荐,这本最新的爬虫书. 那么问题来了,我们是怎么知道它使用的是http/2.0呢,requests不能用吗?

首先解决第一个问题 http/2.0

打开浏览器 去检查元素,看network那个标签下,

image.png

看Protocol这个清一色的h2 就是强制使用https/2.0 咱们去访问一个普通的,比如掘金

image.png

可以发现有h2,也有http/1.1 好我们解决了这个问题来试试requests库可以请求吗?

import requests

r = requests.get("https://spa16.scrape.center/")
print(r.status_code)
print(r.text)
复制代码

得到是报错信息,我就不贴了,运行一下上面代码就能行了. RemoteDisconnected("Remote end closed connection without"

解决问题

安装httpx库

pip3 install httpx 注意此时你的httpx还是不能访问h2的需要再安装一下

pip3 install 'httpx[http2]'

ok此时我们就已经安装好了

基本用法

此时我们就很开心,发现用法api跟requests库一样,那我们来解决访问上面那个网站的问题吧

import httpx

r = httpx.get("https://spa16.scrape.center/")

print(r.text)
复制代码

得到结果:

image.png 精彩还是不行,问题就是这样,当你解决了一个问题,另一个问题就又会出现. 看书得知,httpx这个库默认是不支持h2的需要我们声明一下才好用. 声明如下:

import httpx

# 我们多了这行声明
client = httpx.Client(http2=True)
# 调用声明的对象去访问
r = client.get("https://spa16.scrape.center/")

print(r.text)
复制代码

新的问题出现 client对象又是什么

据我的理解,跟session这个对象很想,session中文是回话,client中文是客户端

client对象

上代码: 这是官方的写法

import httpx

with httpx.Client() as client:
    r = client.get("https://www.httpbin.org/get")
    print(r)
复制代码

更多可以参考:www.python-httpx.org/advanced/

OK,今天看到78页了,定一个小目标,本周看到150页,2022-2-12号之前看完

おすすめ

転載: juejin.im/post/7062129638121668616
おすすめ