全网最全!Python爬虫requests库教程(附案例)_python requests

“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (
KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’,

从浏览器中复制过来的Cookie

“cookie”: ’xxx这里是复制过来的cookie字符串’}

请求头参数字典中携带cookie字符串

response = requests.get(’https://www.zhihu.com/creator’, headers=headers)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,response.text)
print(response.status_code)
print(data)


当我们不携带 Cookies 进行请求时:



import requests
import re
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
response = requests.get(’https://www.zhihu.com/creator’, headers=headers)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,response.text)
print(response.status_code)
print(data)


200


[]


在打印的输出结果中为空 , 两者对比 , 则成功利用 headers 参数携带 cookie ,获取登陆后才能访问的页面!


#### 2.4.3 cookies 参数的使用


上一小节我们在headers参数中携带cookie ,也可以使用专门的cookies参数。


❖ 1. cookies 参数的形式:字典


cookies = “cookie 的 name”:“cookie 的 value”


➢ 该字典对应请求头中 Cookie 字符串,以分号、空格分割每一对字典键值对


➢ 等号左边的是一个 cookie 的 name ,对应 cookies 字典的 key


➢ 等号右边对应 cookies 字典的 value


❖ 2.cookies 参数的使用方法


response = requests.get(url, cookies)


❖ 3. 将 cookie 字符串转换为 cookies 参数所需的字典:


cookies\_dict = { cookie . split ( ’=’ ) [ 0 ]: cookie . split ( ’=’ ) [- 1 ] for cookie in


cookies\_str . split ( ’; ’ ) }


❖ 4. 注意:cookie 一般是有过期时间的,一旦过期需要重新获取



response = requests.get(url, cookies)
import requests
import re
url = ’https://www.zhihu.com/creator’
cookies_str = ’复制的cookies’
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
cookies_dict = {cookie.split(’=’, 1)[0]:cookie.split(’=’, 1)[-1] for cookie in
cookies_str.split(’; ’)}

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=cookies_dict)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)


200


[ ’python 中该怎么把这种 id 不同但是 class 相同的方法写成一个整合呀?’ , ’ 父母没有能力给我买电脑的钱,我该怎么办?’ , ’ 一句话形容一下你现在的生活状态?’ ]


#### 2.4.4 构造RequestsCookieJar对象进行cookies设置


在这里我们还可以通过构造 RequestsCookieJar 对象进行 cookies 设置 , 示例代码如下:



import requests
import re
url = ’https://www.zhihu.com/creator’
cookies_str = ’复制的cookies’
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies_str.split(’;’):
key,value = cookie.split(’=’,1)
jar. set(key,value)

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=jar)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)


200


[ ’python 中该怎么把这种 id 不同但是 class 相同的方法写成一个整合呀?’ , ’ 父母没有能力给我买电脑的钱,我该怎么办?’ , ’ 一句话形容一下你现在的生活状态?’ ]


这里我们首先新建了一个RequestCookieJar对象,然后将复制下来的cookies利用split() 方法分剖,接着利用 set()方法设置好每个Cookie的key和value,然后通过调用 requests的get()方 法并传递给cookies参数即可。


当然,由于知乎本身的限制, headers参数也不能少,只不过不需要在原来的 headers 参数里面设置 cookie 字段了。测试后,发现同样可以正常登录知乎。


#### 2.4.5 cookieJar 对象转换为 cookies 字典的方法


使用 requests 获取的 resposne 对象,具有 cookies 属性。该属性值是一个 cookieJar 类型,包含了对方服务器设置在本地的 cookie 。我们如何将其转换为 cookies 字典呢?


❖ 1. 转换方法


cookies\_dict = requests.utils.dict\_from\_cookiejar(response.cookies)


❖ 2. 其中 response.cookies 返回的就是 cookieJar 类型的对象


❖ 3. requests.utils.dict\_from\_cookiejar 函数返回 cookies 字典



import requests
import re
url = ‘https://www.zhihu.com/creator’
cookies_str = ‘复制的cookies’
headers = {“user-agent”: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
cookie_dict = {cookie.split(‘=’, 1)[0]:cookie.split(‘=’, 1)[-1] for cookie in
cookies_str.split('; ')}

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=cookies_dict)
data = re.findall(‘CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)

可以把一个字典转化为一个requests.cookies.RequestsCookieJar对象

cookiejar = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None,
overwrite=True)
type(cookiejar) # requests.cookies.RequestsCookieJar
type(resp.cookies) # requests.cookies.RequestsCookieJar
#构造RequestsCookieJar对象进行cookies设置其中jar的类型也是 requests.cookies.
RequestsCookieJar
#cookiejar转字典
requests.utils.dict_from_cookiejar(cookiejar)


### 2.5 Timeout 设置


在平时网上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能任 然没有结果。


在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需 要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。


❖ 1. 超时参数 timeout 的使用方法


response = requests.get(url, timeout=3)


❖ 2. timeout=3 表示:发送请求后, 3 秒钟内返回响应,否则就抛出异常


url = ‘http://www.tipdm.com/tipdm/index.html’


#设置超时时间为2


print(‘超时时间为2:’,requests.get(url,timeout=2))


## 超时时间过短将会报错


requests.get(url,timeout = 0.1) #备注时间为0.001


超时时间为 2: <Response [200]>


## 3.使用Request发送POST请求


思考:哪些地方我们会用到POST请求?


1.登录注册(在 web 工程师看来 POST 比 GET 更安全, url 地址中不会暴露用户的账号密码等信息)


2.需要传输大文本内容的时候( POST 请求对数据长度没有要求)


所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送 post 请求其实发送 POST 请求与 GET 方式很相似,只是参数的传递我们需要定义在 data 中即可:


POST参数说明:


post(url, data=None, json=None, \*\*kwargs):


❖ URL: 待请求的网址


❖ data :( 可选 ) 字典,元组列表,字节或类似文件的对象,以在 Request 的正文中发送


❖ json: ( 可选 )JSON 数据,发送到 Request 类的主体中。


❖ \*\*kwargs: 可变长关键字参数



import requests
payload = {’key1’: ’value1’, ’key2’: ’value2’}
req = requests.post(“http://httpbin.org/post”, data=payload)
print(req.text)


### 3.1 POST发送JSON数据


很多时候你想要发送的数据并非编码为表单形式的 , 发现特别在爬取很多java网址中出现这个问题。如果你传递一个 string而不是一个dict ,那么数据会被直接发布出去。我们可以使用json.dumps()是将 dict 转化成str格式 ; 此处除了可以自行对dict进行编码,你还可以使用json参数直接传递,然后它就会被自动编码。



import json
import requests
url = ’http://httpbin.org/post’
payload = {’some’: ’data’}
req1 = requests.post(url, data=json.dumps(payload))
req2 = requests.post(url, json=payload)
print(req1.text)
print(req2.text)


可以发现,我们成功获得了返回结果,其中 form 部分就是提交的数据,这就证明 POST 请求 成功发送了。


**笔记**


requests 模块发送请求有 data 、 json 、 params 三种携带参数的方法。


params 在 get 请求中使用, data 、 json 在 post 请求中使用。


data 可以接收的参数为:字典,字符串,字节,文件对象。


❖ 使用 json 参数,不管报文是 str 类型,还是 dict 类型,如果不指定 headers 中 content-type 的


类型,默认是:application/json 。


❖ 使用 data 参数,报文是 dict 类型,如果不指定 headers 中 content-type 的类型,默认 application/x


www-form-urlencoded ,相当于普通 form 表单提交的形式,会将表单内的数据转换成键值对,此时数据可以从 request.POST 里面获取,而 request.body 的内容则为 a=1&b=2 的这种键值对形式。


❖ 使用 data 参数,报文是 str 类型,如果不指定 headers 中 content-type 的类型,默认 application/json。


用 data 参数提交数据时, request.body 的内容则为 a=1&b=2 的这种形式,


用 json 参数提交数据时, request.body 的内容则为 ’“a”: 1, “b”: 2’ 的这种形式


### 3.2 POST 上传文件


如果我们要使用爬虫上传文件,可以使用 fifile 参数:



url = ‘http://httpbin.org/post’
files = {‘file’: open(‘test.xlsx’, ‘rb’)}
req = requests.post(url, files=files)
req.text


如果有熟悉 WEB 开发的伙伴应该知道,如果你发送一个非常大的文件作为 multipart/form data 请求,你可能希望将请求做成数据流。默认下 requests 不支持 , 你可以使用 requests-toolbelt 三方库。


### 3.3 使用 POST 请求抓取网页


主要是找到待解析的网页



import requests

准备翻译的数据

kw =
input(“请输入要翻译的词语:”)
ps = {“kw”: kw}

准备伪造请求

headers = {

User-Agent:首字母大写,表示请求的身份信息;一般直接使用浏览器的身份信息,伪造

爬虫请求

让浏览器认为这个请求是由浏览器发起的[隐藏爬虫的信息]

“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (
KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41”
}

发送POST请求,附带要翻译的表单数据–以字典的方式进行传递

response = requests.post(“https://fanyi.baidu.com/sug”, data=ps)

打印返回的数据

print(response.content)

print(response.content.decode(“unicode_escape”))


## 4.Requests进阶(1)\*Session会话维持


在这一部分主要介绍关于 Session 会话维持,以及代理 IP 的使用。


在requests中,如果直接利用get()或post()等方法的确可以做到模拟网页的请求,但是这实际上是相当于不同的会话,也就是说相当于你用了两个浏览器打开了不同的页面。


设想这样一个场景,第一个请求利用post() 方法登录了某个网站,第二次想获取成功登录后的自己的个人信息, 你又用了一次get()方法去请求个人信息页面。实际上,这相当于打开了两个浏览器,这是两个完全不相关的会话,能成功获取个人信息吗?那当然不能。


有小伙伴可能说了,我在两次请求时设置一样的cookies不就行了?可以,但这样做起来显 得很烦琐,我们有更简单的解决方法。


其实解决这个问题的主要方法就是维持同一个会话,也就是相当于打开一个新的浏览器选项 卡而不是新开一个浏览器。但是我又不想每次设置cookies,那该怎么办呢?这时候就有了新的 利器一Session对象。


利用它,我们可以方便地维护一个会话,而且不用担心 cookies 的问题,它 会帮我们自动处理好。


requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。接下来我们就来学习它。


### 4.1 requests.session 的作用以及应用场景


❖ requests.session 的作用


自动处理 cookie , 即下一次请求会带上前一次的 cookie


❖ requests.session 的应用场景


自动处理连续的多次请求过程中产生的cookie


### 4.2 requests.session 使用方法


session 实例在请求了一个网站后,对方服务器设置在本地的 cookie 会保存在 session 中,下 一次再使用 session 请求对方服务器的时候,会带上前一次的 cookie。


session = requests . session () # 实 例 化 session 对 象


response = session . get ( url , headers , …)


response = session . post ( url , data , …)


session 对象发送 get 或 post 请求的参数,与 requests 模块发送请求的参数完全一致。


### 4.3 使用Session维持github登录信息


❖ 对 github 登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包


❖ 确定登陆请求的 url 地址、请求方法和所需的请求参数


-部分请求参数在别的 url 对应的响应内容中,可以使用 re 模块获取


❖ 确定登陆后才能访问的页面的的 url 地址和请求方法


❖ 利用 requests.session 完成代码



import requests
import re

构造请求头字典

headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (
KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36’,}

实例化session对象

session = requests.session()

访问登陆页获取登陆请求所需参数

response = session.get(https://github.com/login, headers=headers)
authenticity_token = re.search(‘name=“authenticity_token” value=“(.*?)” />’,
response.text).group(1) # 使用正则获取登陆请求所需参数

构造登陆请求参数字典

data = {
‘commit’: ‘Sign in’, # 固定值
‘utf8’: ’ ', # 固定值
‘authenticity_token’: authenticity_token, # 该参数在登陆页的响应内容中
‘login’:
input(‘输入github账号:’),
‘password’:
input(‘输入github账号:’)}

发送登陆请求(无需关注本次请求的响应)

session.post(https://github.com/session, headers=headers, data=data)

打印需要登陆后才能访问的页面

response = session.get(https://github.com/settings/profile, headers=headers)
print(response.text)


可以使用文本对比工具进行校对 !


## 5.Requests进阶(2)\*代理的使用


对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模爬取,对于 大规模且频繁的请求,网站可能会弹出验证码,或者跳转到登录认证页面,更甚者可能会直接封禁客户端的 IP ,导致一定时间段内无法访问。


那么,为了防止这种情况发生,我们需要设置代理来解决这个问题,这就需要用到 proxies 参数。可以用这样的方式设置:


proxy代理参数通过指定代理ip ,让代理ip对应的正向代理服务器转发我们发送的请求,那么我们首先来了解一下代理ip以及代理服务器。


### 5.1 使用代理的过程


1.代理 ip 是一个 ip ,指向的是一个代理服务器


2.代理服务器能够帮我们向目标服务器转发请求


### 5.2 正向代理和反向代理


前边提到 proxy 参数指定的代理 ip 指向的是正向的代理服务器,那么相应的就有反向服务器;现在来了解一下正向代理服务器和反向代理服务器的区别。


❖ 从发送请求的一方的角度,来区分正向或反向代理


❖ 为浏览器或客户端(发送请求的一方)转发请求的,叫做正向代理


-浏览器知道最终处理请求的服务器的真实 ip 地址,例如 VPN


❖ 不为浏览器或客户端(发送请求的一方)转发请求、而是为最终处理请求的服务器转发请求的,叫做反向代理


-浏览器不知道服务器的真实地址,例如nginx。


### 5.3 代理 ip(代理服务器)的分类


❖ 根据代理 ip 的匿名程度,代理 IP 可以分为下面三类:


➢ 透明代理 (Transparent Proxy) :透明代理虽然可以直接“隐藏”你的 IP 地址,但是还是可以查到你是谁。


目标服务器接收到的请求头如下:


REMOTE\_ADDR = Proxy IP


HTTP\_VIA = Proxy IP


HTTP\_X\_FORWARDED\_FOR = Your IP


➢ 匿名代理 (Anonymous Proxy) :使用匿名代理,别人只能知道你用了代理,无法知道你是谁。


目标服务器接收到的请求头如下:


REMOTE\_ADDR = proxy IP


HTTP\_VIA = proxy IP


HTTP\_X\_FORWARDED\_FOR = proxy IP


➢ 高匿代理 (Elite proxy 或 High Anonymity Proxy) :高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。\*\* 毫无疑问使用高匿代理效果最好 \*\* 。


目标服务器接收到的请求头如下:


REMOTE\_ADDR = Proxy IP


HTTP\_VIA = not determined


HTTP\_X\_FORWARDED\_FOR = not determined


❖ 根据网站所使用的协议不同,需要使用相应协议的代理服务。


从代理服务请求使用的协议可以分为:


➢ http 代理:目标 url 为 http 协议


➢ https 代理:目标 url 为 https 协议


➢ socks 隧道代理(例如 socks5 代理)等:


✾ 1. socks 代理只是简单地传递数据包,不关心是何种应用协议( FTP 、 HTTP 和HTTPS 等)。


✾ 2. socks 代理比 http 、 https 代理耗时少。


✾ 3. socks 代理可以转发 http 和 https 的请求


### 5.4 proxies 代理参数的使用


为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封 ip ,所以我们需要使用代理 ip ;那么我们接下来要学习 requests 模块是如何使用代理 ip 的基本用法。



response = requests . get ( url , proxies = proxies )
proxies 的形式:字典
proxies = {
" http ": " http 😕/ 12.34.56.79: 9527 ",
" https ": " https 😕/ 12.34.56.79: 9527 ",
}


注意:如果 proxies 字典中包含有多个键值对,发送请求时将按照 url 地址的协议来选择使用相应的代理ip



import requests
proxies = {
“http”: “http://124.236.111.11:80”,
“https”: “https:183.220.145.3:8080”}
req = requests.get(’http://www.baidu.com’,proxies =proxies)
req.status_code


## 6.Requests进阶(3)\*SSL证书验证


此外, requests还提供了证书验证的功能。当发送HTTP请求的时候,它会检查SSL证书,我 们可以使用verify参数控制是否检查此证书。其实如果不加verify参数的话,默认是True,会向动验证。


现在我们用 requests 来测试一下:



import requests
url = ‘https://cas.xijing.edu.cn/xjtyrz/login’
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
req = requests.get(url,headers=headers)


SSLError: HTTPSConnectionPool(host= ’cas.xijing.edu.cn’ , port=443): Max retries exceeded with url: /xjtyrz/login (Caused by SSLError(SSLCertVerificationError(1,[SSL: CERTIFICATE\_VERIFY\_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:1123)’)))


这里提示一个错误 SSL Error ,表示证书验证错误。所以,如果请求一个 HTTPS 站点,但是证书验证错误的页面时,就会报这样的错误,那么如何避免这个错误呢?很简单,把 verify 参数设置为 False 即可。


相关代码如下:



import requests
url = ‘https://www.jci.edu.cn/’
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
req = requests.get(url,headers=headers,verify=False)
req.status_code


200


找不到需要做 SSL 验证的网页了,好气哦 !


不过我们发现报了一个警告它建议我们给它指定证书。我们可以通过设置忽略警告的方式来屏蔽这个警告:



import requests
from requests.packages import urllib3
urllib3.disable_warnings()
url = ‘https://www.jci.edu.cn/’
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
req = requests.get(url,headers=headers,verify=False)
req.status_code




---


200


或者通过捕获警告到日志的方式忽略警告:



import logging
import requests
logging.captureWarnings(True)
url = ‘https://www.jci.edu.cn/’
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
req = requests.get(url,headers=headers,verify=False)
req.status_code




---


200


当然,我们也可以指定一个本地证书用作客户端证书,这可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组:



import requests
response = requests.get(https://www.12306.cn’,cert=(’./path/server.crt’,’/path/key
))
print(response.status_code)




---


200


当然,上面的代码是演示实例,我们需要有 crt 和 ke y 文件,并且指定它们的路径。注意,本地私有证书的 key 必须是解密状态,加密状态的 key 是不支持的。现在都很少有这种了网址了 !


## 7.Requests库其他内容


### 7.1 查看响应内容


发送请求后,得到的自然就是响应。在上面的实例中,我们使用 text 和 content 获取了响应的内容。此外,还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、Cookies 等。


示例如下:



import requests
url = ‘https://www.baidu.com’
req = requests.get(url)
print(req.status_code)

响应状态码

print(req.text)

响应的文本内容

print(req.content)

响应的二进制内容

print(req.cookies)

响应的cookies

print(req.encoding)

响应的编码

print(req.headers)

响应的头部信息

print(req.url)

响应的网址

print(req.history)

响应的历史


### 7.2 查看状态码与编码


使用 rqg.status\_code 的形式可查看服务器返回的状态码,而使用 rqg.encoding 的形式可通过 服务器返回的 HTTP 头部信息进行网页编码。需要注意的是,当 Requests 库猜测错误的时候,需 要手动指定 encoding 编码,避免返回的网页内容出现乱码。


### 7.3 发送get请求,并手动指定编码


代码 1-2: 发送 get 请求,并手动指定编码



url = ‘http://www.tipdm.com/tipdm/index.html’
rqg = requests.get(url)
print('状态码 ',rqg.status_code)
print('编码 ',rqg.encoding)
rqg.encoding = ‘utf-8’ #手动指定编码
print('修改后的编码 ',rqg.encoding)

print(rqg.text)


状态码,200


编码,ISO-8859-1


修改后的编码,utf-8


**笔记**


手动指定的方法并不灵活,无法自适应爬取过程中的不同的网页编码,而使用chardet库的方法比较简便灵活。chardet 库是一个非常优秀的字符串 / 文件编码检测模块


### 7.4 chardet 库的使用


chartdet 库的 detect 方法可以检测给定字符串的编码,其语法格式如下。


chartdet.detect(byte\_str)


detect 方法常用参数及其说明


byte\_str :接收 string 。表示需要检测编码的字符串。无默认值


### 7.5 使用detect方法检测编码并指定


代码 1-3: 使用 detect 方法检测编码并指定编码



import chardet
url = ‘http://www.tipdm.com/tipdm/index.html’
rqg = requests.get(url)
print(rqg.encoding)
print(chardet.detect(rqg.content))
rqg.encoding = chardet.detect(rqg.content)[‘encoding’]

访问字典元素

print(rqg.encoding)


ISO-8859-1


{ ’encoding’ : ’utf-8’ , ’confidence’ : 0.99, ’language’ : ’’ }


utf-8


### 7.6 requests 库综合测试


向网站 ’http://www.tipdm.com/tipdm/index.html’ 发送一个完整GET的请求 , 该请求包含链接、 请求头、响应头、超时时间和状态码, 并且编码正确设置。


代码 1-6: 生成完整的HTTP请求。



导入相关的库

import requests
import chardet

设置url

url = ‘http://www.tipdm.com/tipdm/index.html’

设置请求头

headers = {“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36”}

生成GET请求,并设置延时为2

rqg = requests.get(url,headers=headers,timeout = 2)

查看状态码

print("状态码 ",rqg.status_code)

检测编码(查看编码)

print('编码 ',rqg.encoding)

使用chardet库的detect方法修正编码

rqg.encoding = chardet.detect(rqg.content)[‘encoding’]

检测修正后的编码

print('修正后的编码: ',rqg.encoding)
#查看响应头
print(‘响应头:’,rqg.headers)

查看网页内容

#print(rqg.text)


状态码,200


编码,ISO-8859-1


修正后的编码 : utf-8


响应头:{ ’Date’ : ’Mon, 18 Nov 2019 06:28:56 GMT’ , ’Server’ : ’Apache-Coyote/1.1’ , ’


Accept-Ranges’ : ’bytes’ , ’ETag’ : ’W/“15693-1562553126764”’ , ’Last-Modified’ : ’


Mon, 08 Jul 2019 02:32:06 GMT’ , ’Content-Type’ : ’text/html’ , ’Content-Length’ : ’


15693’ , ’Keep-Alive’ : ’timeout=5, max=100’ , ’Connection’ : ’Keep-Alive’ }




---


好了今天的分享就到这里了,最后多说一句,小编也是一名python开发工程师,这里有我自己整理的一套最新的python系统学习教程,如果你需要的话,**微信扫描下方CSDN官方认证二维码即可领取**


## 题外话


在此疾速成长的科技元年,编程就像是许多人通往无限可能世界的门票。而在编程语言的明星阵容中,Python就像是那位独领风 骚的超级巨星, 以其简洁易懂的语法和强大的功能,脱颖而出,成为全球最炙手可热的编程语言之一。


![](https://img-blog.csdnimg.cn/cb501c90f34040bf8a4f8b5b3ea2a99c.gif)  
 Python 的迅速崛起对整个行业来说都是极其有利的 **,但“`人红是非多`”,导致它平添了许许多多的批评,不过依旧挡不住它火爆的发展势头。**


如果你对Python感兴趣,想要学习pyhton,这里给大家分享一份**Python全套学习资料**,都是我自己学习时整理的,希望可以帮到你,一起加油!


### 关于Python的技术储备


在这里给大家分享一些免费的课程供大家学习,下面是课程里面的截图,扫描最下方的二维码就能全部领取


#### 1.Python所有方向的学习路线


![在这里插入图片描述](https://img-blog.csdnimg.cn/d222f0a02fbd48d1b3f914755c18224b.jpeg)


#### 2.学习软件


工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/41aca9867fc04680aa46f143da58322f.jpeg)


#### 3.学习资料


![在这里插入图片描述](https://img-blog.csdnimg.cn/1d5048e2e2cf448f91f566dd2921231f.jpeg)


#### 4.实战资料

 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/231ce1ff42f73295f1f8eff845c7c666.png)

![img](https://img-blog.csdnimg.cn/img_convert/96930e3f57f060a5bc78b407b7cff33e.png)

![img](https://img-blog.csdnimg.cn/img_convert/2cd4b2d0c639c172051d0031cf4659e6.png)

![img](https://img-blog.csdnimg.cn/img_convert/6608c281dd739c95f87290443fb0126f.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

省了很多时间。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/41aca9867fc04680aa46f143da58322f.jpeg)


#### 3.学习资料


![在这里插入图片描述](https://img-blog.csdnimg.cn/1d5048e2e2cf448f91f566dd2921231f.jpeg)


#### 4.实战资料

 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中...(img-lLKIXqzE-1713758644432)]

[外链图片转存中...(img-zzbXxIso-1713758644433)]

[外链图片转存中...(img-RGjQ3KxR-1713758644433)]

[外链图片转存中...(img-kg7BX9lJ-1713758644434)]

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/9b0c64a76229b9300f05d88996b0ff14.jpeg)
  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值