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

建筑兔零基础自学记录69|爬虫Requests-2

Requests库初步尝试

#导入requests库
import requests
#requests.get读取百度网页
r=requests.get('http://www.baidu.com')
#输出读取网页状态
print(r.status_code)
#输出网页源代码
print(r.text)

HTTP 状态码是三位数字,用于表示 HTTP 请求的结果。常见的状态码有:

  • 200:表示请求成功。
  • 404:表示请求的资源不存在。
  • 500:表示服务器内部出错。

所以只有200是成功,其他都是失败!

运行代码看到200成功读取网页,并解读了网页源代码

一、Requests库主要七个方法

 

1、 requests.get('http://www.baidu.com')

这就是刚开始我们获取百度网页的方法,非常常用。

注意这里的网址是要http开头的,如果只有www则会报错

#输出r对象的类型,即requests.models.Response
print(type(r))
#输出HTTP 头部信息
print(r.headers)

2、六个方法之间关系

3、PATCHPUT区别

  假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段

需求:用户修改了UserName,其他不变

  • 采用PATCH,仅向URL提交UserName的局部更新请求(局部改)
  • 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除(整体改)

PATCH的最主要好处:节省网络带宽

二、Response对象的属性

 让我们来解读一下网页的编码方式:

import requests
r=requests.get('https://www.sina.com.cn/')
print(r.status_code)
print(r.text)
#输出网页header中得出的编码方式
print(r.encoding)
#输出网页内容中分析得出的编码方式
print(r.apparent_encoding)

可以看到解析内容看不懂

r.encoding得出新浪的编码方式 ISO-8859-1
r.apparent_encoding分析出新浪推测的编码方式utf-8

在中文网页中只有utf-8才能读出内容

当我们在代码中添加r.encoding = 'utf-8' 才可以解读出网页内容

 

三、Response库可能发生的异常

 

四、★★★爬取网页的通用代码框架

这是一个通用的代码:

import requests

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()    #如果状态不是200,引发HTTPError异常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "产生异常"

if __name__=='__main__':
    url='https://www.sina.com.cn/'
    print(getHTMLText(url))

运行代码可得

如果在网站中删除http则会报错

 

五、HTTP协议

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议

HTTP协议采用URL作为定位网络资源的标识,URL格式如下:

http://host[:port][path]

  • host: 合法的Internet主机域名或IP地址
  • port: 端口号,缺省端口为80
  • path: 请求资源的路径

URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源

六、总结

  • r.status_code:200是成功
  • requests.get('http://www.baidu.com')
  • PATCH局部更新   /  PUT全局更新
  • r.encoding得出编码方式
  • r.apparent_encoding推测编码方式
  • 添加r.encoding = 'utf-8' 才可以解读出网页内容
  • 爬虫通用代码框架:

import requests

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()    #如果状态不是200,引发HTTPError异常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "产生异常"

if __name__=='__main__':
    url='https://www.sina.com.cn/'
    print(getHTMLText(url))

http://www.dtcms.com/a/122186.html

相关文章:

  • 开篇 - Unlua+VsCode的智能提示、调试
  • 缓存工具类
  • 嵌入式 C语言 位操作 宏命令
  • spring boot 2.7 集成 Swagger 3.0 API文档工具
  • centos7系统搭建nagios监控
  • 【AI】MCP+cline 实现github官网项目查询
  • .vue文件中组件名称的设置,<script>标签的 name 属性说明
  • JS—浏览器的缓存策略:3分钟精通浏览器缓存策略
  • Vue3中watch监视reactive对象方法详解
  • Java 设计模式:单例模式详解
  • 【算法笔记】并查集详解
  • 蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
  • 2025年港口危货储存单位主要安全管理人员备考练习题
  • JVM 不同的垃圾收集算法分别有什么优缺点?
  • 【AI】MCP概念
  • 安全理念和安全产品发展史
  • 整合线下资源视角下定制开发开源AI智能名片S2B2C商城小程序的应用研究
  • git 如何彻底删除已经提交到远程仓库的文件?而不是覆盖删除?git 如何删除已经提交到本地的文件?从历史记录中彻底清除彻底删除(本地+远程)
  • 汽车的四大工艺
  • TDengine 语言连接器(Python )
  • 达摩院Paraformer-ONNX模型:一站式高精度中文语音识别工业级解决方案
  • 物联网与边缘计算之物联网架构(感知层、网络层、应用层)
  • 什么是堆?深入理解堆数据结构及其应用
  • SSM智能停车场管理系统
  • 基于OpenCV的图像处理程序设计实践
  • dify使用知识库
  • 机器学习02——概要
  • Ansible的使用
  • Java面试黄金宝典44
  • Yalmip工具箱(3)——错误类型