当前位置: 首页 > 工具软件 > httpx.js > 使用案例 >

爬虫学习:httpx的使用

章晗日
2023-12-01

爬虫学习:httpx的使用

一、前言

前面介绍的urllib库和requests库的使用,已经可以应对大多数的情况,但是有一些的网站它是强制使用HTTP/2.0协议访问的,这个时候前面两个库是不支持HTTP/2.0的,这个时候就需要用到支持这个协议的库来爬取网页了,其中httpx具有代表性,也更方便。

二、HTTP2和HTTP1.1的区别

谈到这里,我来简单的说一下2和1.1的一些主要区别,想知道更多的可以自行上网去查阅。

从技术角度来看,两者最大的区别就是二进制框架层,其中http1.1把所有的请求和响应作为纯文本,而http2是把所有的消息封装成二进制,且仍然保持http语法,http2比http1.1传输信息更加灵活。

三、httpx的安装

httpx的安装可以直接使用pip工具安装,但是需要Python版本要在3.6及其以上

这里并不能直接使用如下安装命令:

pip install httpx

因为这样安装的话,你所安装的httpx是不支持HTTP/2.0的,应该这样安装:

pip install 'httpx[http2]'

四、基本使用

我们尝试一些使用httpx请求一个网站

import httpx

response = httpx.get('https://spa16.scrape.center')
print(response.text)

它运行的结果为:

Traceback (most recent call last):
...
raise mapped_exc(message) from exc
httpx.RemoteProtocolError: Server disconnected without sending a response.

可以看出报错了,虽然前面说httpx支持HTTP2.0,并且我们也安装了对应支持它的库,但是httpx默认是使用HTTP1.1的,我们需要手动的说明一下才可以让它正常支持HTTP2.0

import httpx

client = httpx.Client(http2=True)
response = client.get('https://spa16.scrape.center')
print(response.text)

它运行的结果为:

<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=referrer content=no-referrer><link rel=icon href=/favicon.ico><title>Scrape | Book</title><link href=/css/chunk-50522e84.e4e1dae6.css rel=prefetch><link href=/css/chunk-f52d396c.4f574d24.css rel=prefetch><link href=/js/chunk-50522e84.6b3e24aa.js rel=prefetch><link href=/js/chunk-f52d396c.f8f41620.js rel=prefetch><link href=/css/app.ea9d802a.css rel=preload as=style><link href=/js/app.b93891e2.js rel=preload as=script><link href=/js/chunk-vendors.a02ff921.js rel=preload as=script><link href=/css/app.ea9d802a.css rel=stylesheet></head><body><noscript><strong>We're sorry but portal doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/js/chunk-vendors.a02ff921.js></script><script src=/js/app.b93891e2.js></script></body></html>

现在我们发现可以成功的获取HTML代码了,所以以后使用httpx的时候需要开启对HTTP2.0的支持才行。

上面我们使用的是GET方法,另外对于POST请求等方法来说,实现的方法类似,在这里就不做过多示范,httpx的一些基本方法也和requests极其类似,想要更加深入了解的可以自行去官网查阅资料

官网地址我放在这里:http://www.python-httpx.org/quickstart

五、Client对象

来说一下http跟requests中不相似的,其中httpx中有一个Client对象。

可以用httpx.Client()来类比requests.Session()

举个例子:

import httpx

with httpx.Client() as client:
    response = client.get('https://www.httpbin.org/get')
    print(response)

它运行的结果为:

<Response [200 OK]>

这个用法等价于;

import httpx

client = httpx.Client()
try:
    response = client.get('https://www.httpbin.org/get')
finally:
    client.close()

另外声明Client对象时可以指定一些参数

import httpx

url = 'http://httpbin.org/headers'
headers = {'user-agent': 'my-app/0.0.1'}
with httpx.Client(headers=headers) as client:
    r = client.get(url)
    
var = r.json()['headers']['User-Agent']
print(var)

它运行的结果为:

my-app/0.0.1

可以看到,headers成功赋值了。

另外,我想说,如果使用httpx进行客户端和服务器的连接,两者的HTTP协议要进行匹配才能成功连接和传输信息。

六、异步请求

httpx还支持异步客户端请求,在这里就先了解一下,等以后学习的时候再进行总结。

七、最后我想说

httpx的用法和requests用法非常相似,我们可以多进行类比学习,但也要注意两者的区别,灵活使用,更多的用法可以去官方文档里面去学习,比起眼花缭乱的各种资料视频,官网文档有时候可能更有利于学习。

 类似资料: