• 网络请求与数据解析


    urllib是Python自带的标准库中用于网络请求的库 ,无需安装,直接引用即可。通常用于爬虫开发、API(应用程序编程接口)数据获取和测试。

    urllib库的几个模块:

    • urllib.request :用于打开和读取URL
    • urllib.error:包含提出的例外(异常)urllib.request
    • urllib.parse:用于解析URL
    • urllib.robotparser:用于解析robots.txt文件
    1. import urllib.request
    2. # 请求 URL
    3. response = urllib.request.urlopen('http://www.example.com')
    4. # 获取响应内容
    5. content = response.read()
    6. # 打印响应内容前 100 个字符
    7. print(content[:100])

     urllib.parse 模块可以用来解析 URL:

    1. from urllib.parse import urlparse, parse_qs
    2. # 解析 URL
    3. url = 'http://www.example.com/path?name=John&age=30'
    4. parsed_url = urlparse(url)
    5. # 获取 URL 的各个组成部分
    6. scheme = parsed_url.scheme
    7. netloc = parsed_url.netloc
    8. path = parsed_url.path
    9. params = parsed_url.params
    10. query = parsed_url.query
    11. fragment = parsed_url.fragment
    12. # 解析查询字符串
    13. query_dict = parse_qs(query)
    14. print(f"Scheme: {scheme}")
    15. print(f"Netloc: {netloc}")
    16. print(f"Path: {path}")
    17. print(f"Params: {params}")
    18. print(f"Query: {query}")
    19. print(f"Fragment: {fragment}")
    20. print(f"Query dictionary: {query_dict}")

    发送请求 

    • urllib.request库 模拟浏览器发起一个HTTP请求,并获取请求响应结果。
    • urllib.request.urlopen  urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)

    data:默认值为None,urllib判断参数data是否为None从而区分请求方式。 

    urlopen函数返回的结果是一个http.client.HTTPResponse对象 

    写一个爬虫程序:

    • 导入 urllib.request
    • 打开url
    • 读取响应内容  

    IP代理

    IP代理:假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理。

    IP代理的分类 :

    1.  透明代理:目标网站知道你使用了代理且知道你的源IP地址
    2. 匿名代理:匿名程序比较低,也就是网站知道你使用了代理,但是并不知道你的源IP地址
    3. 高匿代理:最保险的方式,目录网站既不知道你使用了代理更不知道你的源IP 

    使用Cookie 

    为什么需要使用Cookie 解决http的无状态性 

    • 实例化MozillaCookieJar (保存cookie)
    • 创建 handler对象(cookie的处理器)
    • 创建opener对象
    • 打开网页(发送请求获取响应)
    • 保存cookie文件 

    异常处理主要用到两大类

    urllib.error.URLError :用于捕获由urllib.request产生的异常,使用reason属性返回错误原因。

    urllib.error.HTTPError :用于处理HTTP与HTTPS请求的错误,它有三个属性:

    • code:请求返回的状态码
    • reason:返回错误的原因
    • headers:请求返回的响应头信息

    requests库 

    Requests 是Python一个很实用的HTTP客户端,完全满足如今网络爬虫的需求

    requests库的安装

    • windows:pip install requests
    • Mac : pip3 install requests
    • Linux:sudo pip install requests 

    方法

    描述

    requests.request(url)

    构造一个请求,支持以下各种方法

    requests.get()

    发送Get请求

    requests.post()

    发送Post请求

    requests.head()

    获取HTML的头部信息

    requests.put()

    发送Put请求

    requests.patch()

    提交局部修改的请求

    requests.delete()

    提交删除请求

    语法结构:     requests.get(url, params=None) 

    •  url:需要爬取的网站的网址
    • params:请求参数

     

     post请求

    requests.post( url, data=None, json=None)

    • url:需要爬取的网站的网址
    • data:请求数据
    • json :json格式的数据

    POST请求和GET请求区别 

    1. 数据传输方式:GET请求通常将参数包含在URL中,而POST请求则通过request body传递参数。这意味着GET请求的参数直接附加在URL之后,而POST请求的参数则放在请求体中。
    2. 安全性:由于GET请求的参数直接暴露在URL中,所以隐私性和安全性较差。POST请求的参数不在URL中,因此相对更加安全。
    3. 数据长度限制:GET请求的数据长度受到URL长度的限制,不同的浏览器和服务器对URL长度有不同的限制,一般限制在2~8K之间,更常见的是1K以内。POST请求没有长度限制,因为请求数据是放在body中的。
    4. 缓存和历史记录:GET请求可以被缓存,而POST请求不会被缓存。GET请求会被保存在浏览器的历史记录中,可以被收藏为书签,但POST请求不会。
    5. 影响服务器状态:GET请求通常用于获取信息,不应对服务器状态产生影响。POST请求通常用于提交数据,可能会改变服务器上的状态。
    6. 浏览器兼容性:GET请求可以直接在浏览器地址栏中输入URL来访问,而POST请求通常需要通过表单提交或其他客户端代码来实现。
    7. 重试和刷新:GET请求可以安全地进行重试和刷新,因为它只是获取数据。POST请求在刷新时可能会重复提交数据,导致多次执行相同的操作。

     session发请求

    • 获取session对象:requests.session()
    • session对象.post() 发送post请求  
    1. import requests
    2. # 创建一个Session对象
    3. session = requests.Session()
    4. # 设置请求头
    5. headers = {
    6. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    7. # 发送GET请求
    8. response = session.get('https://www.example.com', headers=headers)
    9. # 打印响应内容
    10. print(response.text)
    11. # 关闭Session
    12. session.close()
  • 相关阅读:
    Vue基础面试题11-19
    go调用阿里云接口查询ECS信息
    IDEA社区版(Community Edition)创建Springboot-Web项目,Java
    vue3使用富文本编辑器wangEditor-v5(未使用composition api写法)
    java计算机毕业设计酒店预约入住系统源码+mysql数据库+系统+lw文档+部署
    STL函数模板入门
    Debian/Ubuntu 安装 NodeJS【详细步骤】
    智能聊天机器人的优势在哪里?资深独立站卖家告诉你!
    Spring Cloud 学习笔记(1 / 3)
    迁移vm到pve
  • 原文地址:https://blog.csdn.net/qq_64685283/article/details/136649824