python request库的使用
安装和使用
requests库支持python3.8+,注意版本
pip install requests
在项目中引用时如下:
import requests
访问网站
request访问网站一般用get和post两种方式
get
requests库提供了get方法,可以用get方式访问网站,相当于在浏览器输入网址直接访问
import requests
url = "https://httpbin.org/ip"
reponse = requests.get(url=url)
get方法有时需要参数,get方式可以用params参数携带。
import requests
url = "https://httpbin.org/get"
data = {
"key1":"value1",
"key2":"value3",
"key3":"value3",
}
reponse = requests.get(url=url,params=data)
post
使用方式和get基本相同,只是传递参数时的属性名不同
import requests
url = "https://httpbin.org/post"
data = {
"name":"测试"
}
# post请求获取数据并向页面传递数据
reponse = requests.post(url,data=data)
请求头
请求头通过header参数设置,get和post都可以通过此参数设置请求头 。
import requests
header = {
"user-agent" : "Mozilla/5.0 (Windows N Edg/129.0.0.0"
}
url = "https://httpbin.org/get"
reponse = requests.get(url,headers=header)
header中的信息可以去浏览器控制台获取
首先访问要爬取的网站,然后在控制台网络下找到网页文件,找到对应信息即可。一般都是网络中的第一个文件,文档类型为document。
请求标头中的就是我们可以设置的。
获取页面
在上面的代码中我们用reponse接收了请求的结果,reponse有很多属性。若直接print(reponse)则会显示状态码信息。
reponse的属性如下:
-
status_code: 整数,HTTP请求的返回状态码,如200表示成功,404表示未找到资源。
-
url: 字符串,最终获取资源的URL。在重定向的情况下,这可能与原始请求的URL不同。
-
headers:
CaseInsensitiveDict
类型的字典,包含服务器响应的HTTP头部信息。这个字典对键不区分大小写。 -
encoding: 字符串,从HTTP头部中猜测的响应内容编码方式。如果头部中没有指定charset,则默认为ISO-8859-1。
-
apparent_encoding: 字符串,从内容中分析出的响应内容编码方式,通常比
encoding
更准确。 -
text: 字符串,HTTP响应内容的文本形式。根据HTTP头部中的编码(默认为ISO-8859-1)或
apparent_encoding
来解码。 -
content: 二进制数据,HTTP响应内容的原始二进制形式。在处理非文本响应(如图片、视频等)时非常有用。
-
json(): 方法,不是属性,但非常重要。尝试将响应内容解析为JSON格式。如果内容不是有效的JSON,将抛出异常。
-
links:
RequestsLinkHeader
对象(或类似),解析Link
头部字段的值,提供了对分页链接等信息的便捷访问(尽管这取决于服务器是否提供了Link
头部)。 -
history: 列表,包含了一个或多个Response对象,表示请求过程中的重定向历史。如果请求没有被重定向,这个列表将是空的。
-
cookies:
RequestsCookieJar
对象,包含从服务器发送回来的cookie信息。注意,这些cookie不会自动用于后续的请求,除非你使用了Session
对象。 -
elapsed:
datetime.timedelta
对象,表示从发送请求到接收响应之间的时间差。 -
request: 发送此响应的
PreparedRequest
对象。这个对象可以用来进一步分析或重新发送请求。 -
status_line: 字符串,完整的HTTP状态行,如
"200 OK"
。 -
close(): 方法,不是属性,但值得一提。用于关闭与响应相关的文件描述符。通常,在大多数情况下,你不需要手动调用此方法,因为Requests库会在处理完响应后自动为你关闭它们。然而,在某些情况下,如果你想要立即释放系统资源,可以手动调用此方法。
可以通过reponse.属性名来访问:
其中较为常用的有text,encoding,header,json(),cookie
cookie
cookie是浏览器保存在本地的一些数据,记录一些用户信息。可以先在浏览器中登录然后控制台中拿到cookie。
import requests
# url = "https://baidu.com"
url = "https://httpbin.org/cookies"
# 请求头信息
header = {
"user-agent":"Mozilla/5.0 (Win.36 Edg/129.0.0.0"
}
# 设置cookie
cookies = dict(cookies_args="hello world")
# 两种写法均可
# cookies = {
# 'username': 'john_doe',
# 'session_token': 'abcdef123456'
# }
reponse = requests.get(url,headers=header,cookies=cookies)
保存数据
保存数据一般是保存request.content或request.text,写入到本地即可。一般的网页用w模式即可。
这里的代码用到了bs4,于明天的推文中详解。
import requests
from bs4 import BeautifulSoup
url = "https://bj.zu.ke.com/zufang"
header = {
"user-agent":"Mozilla/5.0 (Windows NT 9.0.0.0"
}
reponse = requests.get(url,headers=header)
soup = BeautifulSoup(reponse.text)
links = soup.select("a.twoline")
print(links)
links = [f"https://sy.zu.ke.com{i.attrs.get('href')}" for i in links]
for i in links:
reponse = requests.get(i,headers=header)
with open(f"./house/{i[29:50]}.html","w",encoding="utf-8") as f:
f.write(reponse.text)
如果网站对应的是图片或者视频等二进制文件,应使用reponse.content,同时打开模式应改为wb。