urllib是Python自带的标准库中用于网络请求的库 ,无需安装,直接引用即可。通常用于爬虫开发、API(应用程序编程接口)数据获取和测试。
urllib库的几个模块:
- import urllib.request
-
- # 请求 URL
- response = urllib.request.urlopen('http://www.example.com')
-
- # 获取响应内容
- content = response.read()
-
- # 打印响应内容前 100 个字符
- print(content[:100])
urllib.parse
模块可以用来解析 URL:
- from urllib.parse import urlparse, parse_qs
-
- # 解析 URL
- url = 'http://www.example.com/path?name=John&age=30'
- parsed_url = urlparse(url)
-
- # 获取 URL 的各个组成部分
- scheme = parsed_url.scheme
- netloc = parsed_url.netloc
- path = parsed_url.path
- params = parsed_url.params
- query = parsed_url.query
- fragment = parsed_url.fragment
-
- # 解析查询字符串
- query_dict = parse_qs(query)
-
- print(f"Scheme: {scheme}")
- print(f"Netloc: {netloc}")
- print(f"Path: {path}")
- print(f"Params: {params}")
- print(f"Query: {query}")
- print(f"Fragment: {fragment}")
- 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对象
写一个爬虫程序:
IP代理
IP代理:假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理。
IP代理的分类 :
使用Cookie
为什么需要使用Cookie 解决http的无状态性
异常处理主要用到两大类
urllib.error.URLError :用于捕获由urllib.request产生的异常,使用reason属性返回错误原因。
urllib.error.HTTPError :用于处理HTTP与HTTPS请求的错误,它有三个属性:
requests库
Requests 是Python一个很实用的HTTP客户端,完全满足如今网络爬虫的需求
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)
post请求
requests.post( url, data=None, json=None)
- url:需要爬取的网站的网址
- data:请求数据
- json :json格式的数据
POST请求和GET请求区别
session发请求
- import requests
-
- # 创建一个Session对象
- session = requests.Session()
-
- # 设置请求头
- headers = {
- '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'}
-
- # 发送GET请求
- response = session.get('https://www.example.com', headers=headers)
-
- # 打印响应内容
- print(response.text)
-
- # 关闭Session
- session.close()