当前位置: 首页 > news >正文

南充免费推广网站网站制作技术

南充免费推广网站,网站制作技术,东莞网页制作费用大概多少,五金商城网站建设注意urllib 库和 requests 库的使用#xff0c;已经可以爬取绝大多数网站的数据#xff0c;但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问#xff0c;这时 urllib 和requests 是无法爬取数据的#xff0c;因为它们只支持 HTTP/1.1#xff0c;不支持…urllib 库和 requests 库的使用已经可以爬取绝大多数网站的数据但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问这时 urllib 和requests 是无法爬取数据的因为它们只支持 HTTP/1.1不支持 HTTP/2.0。那这种情况下应该怎么办呢? 还是有办法的只需要使用一些支持 HTTP/2.0的请求库就好了目前来说比较有代表性的是hyper 和 httpx后者使用起来更加方便功能也更强大requests 已有的功能它几乎都支持。 示例 下面我们来看一个案例https://spa16.scrape.center/ 就是强制使用 HTTP/2.0访问的一个网站用浏览器打开此网站查看 Network面板可以看到 Protocol 一列都是 h2证明请求所用的协议是HTTP/2.0如下图所示。 这个网站用requests 是无法爬取的不妨来尝试一下: import requestsurl https://spa16.scrape.center/ response requests.get(url) print(response.text)运行结果如下: requests.exceptions.ConnectionError: (Connection aborted., ConnectionResetError(10054, 远程主机强迫关闭了一个现有的连接。, None, 10054, None))可能有人认为这是没有设置请求头导致的其实不是真实原因是requests 这个库是使用 HTTP/1.1访问的目标网站,而目标网站会检测请求使用的协议是不是 HTTP/2.0,如果不是就拒绝返回任何结果。 安装 httpx 可以直接使用 pip3 工具安装所需的 Python 版本是 3.6及以上安装命令如下: pip3 install httpx但这样安装完的 httpx 是不支持 HTTP/2.0的如果想支持可以这样安装: pip3 install httpx[http2]这样就既安装了 httpx又安装了 httpx 对 HTTP/2.0 的支持模块。 基本使用 httpx 和 requests 的很多 API存在相似之处我们先看下最基本的 GET 请求的用法: import httpxresponse httpx.get(https://www.httpbin.org/get) print(response.status_code) print(response.headers) print(response.text)这里我们还是请求之前的测试网站直接使用htpx的get方法即可用法和requests 里的一模一样将返回结果赋值为response 变量然后打印出它的status code、headers、text 等属性运行结果如下: 200 Headers({date: Thu, 19 Dec 2024 14:27:23 GMT, content-type: application/json, content-length: 312, connection: keep-alive, server: gunicorn/19.9.0, access-control-allow-origin: *, access-control-allow-credentials: true}) {args: {}, headers: {Accept: */*, Accept-Encoding: gzip, deflate, Host: www.httpbin.org, User-Agent: python-httpx/0.28.1, X-Amzn-Trace-Id: Root1-67642d4b-31795bb819573e2e7516a357}, origin: 36.163.154.16, url: https://www.httpbin.org/get }输出结果包含三项内容status code 属性对应状态码为 200;headers 属性对应响应头是一Headers 对象类似于一个字典;text 属性对应响应体可以看到其中的 User-Agent 是个、python-httpx/0.18.1代表我们是用 httpx 请求的。 下面换一个 User-Agent 再请求一次代码改写如下: import httpxheaders {User-Agent: Mozilla/5.0 (Macintosh; Intel Mac 0s X 10 15 7)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/90.0.4430.93 Safari/537.36}response httpx.get(https://www.httpbin.org/get, headersheaders) print(response.text)这里我们换了一个 User-Agent重新请求并将其赋值为 headers 变量然后传递给headers 参数运行结果如下: {args: {}, headers: {Accept: */*, Accept-Encoding: gzip, deflate, Host: www.httpbin.org, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac 0s X 10 15 7)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/90.0.4430.93 Safari/537.36, X-Amzn-Trace-Id: Root1-67642df8-64d00406369b3f1b3660c57c}, origin: 36.163.154.16, url: https://www.httpbin.org/get }可以发现更换后的 User-Agent 生效了。 回到本节开头提到的示例网站我们试着用httpx请求一下这个网站看看效果如何代码如下: import httpxresponse httpx.get(https://spa16.scrape.center) print(response.text)运行结果如下 httpx.ReadError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。可以看到抛出了和使用 requests 请求时类似的错误,不是说好支持 HTTP/2.0吗?其实,httpx 默认是不会开启对 HTTP/2.0的支持的,默认使用的是 HTTP/1.1,需要手动声明一下才能使用 HTTP/2.9,代码改写如下: import httpxclient httpx.Client(http2True) response client.get(https://spa16.scrape.center/) print(response.text)运行结果如下: !DOCTYPE htmlhtml langenheadmeta charsetutf-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width,initial-scale1meta namereferrer contentno-referrerlink relicon href/favicon.icotitleScrape | Book/titlelink href/css/chunk-50522e84.e4e1dae6.css relprefetchlink href/css/chunk-f52d396c.4f574d24.css relprefetchlink href/js/chunk-50522e84.6b3e24aa.js relprefetchlink href/js/chunk-f52d396c.f8f41620.js relprefetchlink href/css/app.ea9d802a.css relpreload asstylelink href/js/app.b93891e2.js relpreload asscriptlink href/js/chunk-vendors.a02ff921.js relpreload asscriptlink href/css/app.ea9d802a.css relstylesheet/headbodynoscriptstrongWere sorry but portal doesnt work properly without JavaScript enabled. Please enable it to continue./strong/noscriptdiv idapp/divscript src/js/chunk-vendors.a02ff921.js/scriptscript src/js/app.b93891e2.js/script/body/html这里我们声明了一个 Client 对象赋值为 client 变量同时显式地将 http2 参数设置为 True,这样便开启了对 HTTP/2.0的支持之后就会发现可以成功获取 HTML代码了。这也就印证了这个示例网站只能使用 HTTP/2.0 访问。 刚才我们也提到了httpx和requests有很多相似的API上面实现的是 GET请求对于POST请求、PUT请求和DELETE请求来说实现方式是类似的: import httpxr httpx.get(https://www.httpbin.org/get, params{name: germey}) r httpx.post(https://www.httpbin.org/post, data{name: germey}) r httpx.put(https://www.httpbin.org/put) r httpx.delete(https://www.httpbin.org/delete) r httpx.patch(https://www.httpbin.org/patch)基于得到的 Response 对象可以使用如下属性和方法获取想要的内容。 status code:状态码:text:响应体的文本内容。content:响应体的二进制内容当请求的目标是二进制数据(如图片)时可以使用此属性 获取。headers:响应头是Headers 对象可以用像获取字典中的内容一样获取其中某个 Header 的值。json:方法可以调用此方法将文本结果转化为JSON对象。 除了这些htpx还有一些基本用法也和requests极其类似这里就不再赘述了可以参考官方文档:https://www.python-httpx.org/quickstart/。 Client对象 httpx 中有一些基本的 API和 requests 中的非常相似但也有一些 API是不相似的例如 htpx 中有一个 Client 对象就可以和 requests 中的 Session 对象类比学习。 下面我们介绍 client 对象的使用。官方比较推荐的使用方式是withas语句示例如下: import httpxwith httpx.Client() as client:response client.get(https://www.httpbin.org/get)print(response)运行结果如下: Response [200 OK]这个用法等价于: import httpxclient httpx.Client() try:response client.get(https://www.httpbin.org/get) finally:client.close()两种方式的运行结果是一样的只不过这里需要我们在最后显式地调用 close 方法来关闭 client对象。 另外在声明 Client 对象时可以指定一些参数例如 headers这样使用该对象发起的所有请求都会默认带上这些参数配置示例如下: import httpxurl http://www.httpbin.org/headers headers {User-Agent: my-app/0.0.1} with httpx.Client(headersheaders) as client:r client.get(url)print(r.json()[headers][User-Agent])这里我们声明了一个 headers 变量内容为 User-Agent 属性然后将此变量传递给 headers 参数初始化了一个 client 对象并赋值为 client 变量最后用 client 变量请求了测试网站并打印返回结果中的 User-Agent 的内容: my-app/0.0.1可以看到headers 成功赋值了。 关于 Client 对象的更多高级用法可以参考官方文档:https://www.python-httpx.org/advanced/。 支持 HTTP/2.0 现在是要在客户端上开启对 HTTP/2.0的支持就像“基本使用”小节所说的那样同样是声明Client 对象然后将 http2 参数设置为True如果不设置那么默认支持 HTTP/1.1即不开启对HTTP/2.0 的支持。 写法如下: import httpxclient httpx.Client(http2True) response client.get(https://www.httpbin.org/get) print(response.text) print(response.http_version)这里我们输出了 response 变量的 http_version 属性这是 requests 中不存在的属性其结果可能为: HTTP/2这里输出的 http_version 属性值是 HTTP/2代表使用了 HTTP/2.0 协议传输。 注意在客户端的 httpx 上启用对 HTTP/2.0的支持并不意味着请求和响应都将通过 HTTP/2.0 传输这得客户端和服务端都支持 HTTP/2.0 才行。如果客户端连接到仅支持 HTTP/1.1 的服务器那么它也需要改用 HTTP/1.1。 支持异步请求 httpx 还支持异步客户端请求(即 AsyncClient )支持 Python的 async 请求模式写法如下: import httpx import asyncioasync def fetch(url):async with httpx.AsyncClient(http2True) as client:response await client.get(url)print(response.text)if __name__ __main__:asyncio.get_event_loop().run_until_complete(fetch(https://www.httpbin.org/get))关于异步请求目前仅了解一下即可后面章节也会专门对异步请求进行讲解。大家也可以参考官方文档:https://www.python-httpx.org/async/。 总结 本篇博客介绍了 httpx的基本用法,该库的 API与requests的非常相似,简单易用,同时支持 HTTP/2.0. 推荐大家使用。
http://www.hkea.cn/news/14357431/

相关文章:

  • 谷歌浏览器 安卓下载seo人员是什么意思
  • 上海史特做网站多少钱中文网站排行榜
  • 手机微网站与微官网广州网站建设是什么
  • 创建自己的网站wordpress 头像本地化
  • 简述企业网站维护的重要性wordpress菜单左对齐
  • 青岛高级网站建设服务网站重大建设项目公开发布制度
  • 网站建设教程所需文字做网站时如何写接口文档
  • 网络优化网站建设专门做ppt背景的网站有哪些
  • 浙江网站建设营销简单详细搭建网站教程
  • 请打开网站网站推广的英文content
  • 网站怎么描述网站图片加alt标签
  • 塘厦做网站网站开发 图片
  • 企业网站建立制作wordpress可视化文章
  • 外贸电子商务网站建设厦门网站优化推广
  • 长春火车站到龙嘉机场高铁时刻表网站建设规划公司地址
  • 长沙网站老铁外链
  • 如何做网站的二级页面外贸海外推广
  • 网站开发亿码酷流量外贸新品开发网站
  • 营销型企业网站建设的预算rsd wordpress
  • 上地网站制作wordpress问卷填报主题
  • 使用vue做单页面网站给网站网站做优化
  • 做网站会员登陆e福州便民服务自助终端
  • 昆明php网站建设义乌网站建设公司价位
  • wordpress零基础建站丰城网站建设公司
  • 足球竞猜网站开发计算机专业主要学什么女生
  • 贵州建设监理协会网站怎么把网站管理系统
  • 洛阳网站建设招聘信息友情链接交换网址大全
  • 网站建设服务ysaigo改网站js代码
  • 珠海网站建设杰作美食网站建设背景
  • 网站抠图怎么做的太原工业学院教务网络管理系统