pip install requests
import requests url = 'http://www.tipdm.com/tipdm/index.html' # 生成get请求 rqg = requests.get(url) # 查看结果类型 print('查看结果类型:', type(rqg)) # 查看状态码 print('状态码:',rqg.status_code) # 查看编码 print('编码 :',rqg.encoding) # 查看响应头 print('响应头: ',rqg.headers) # 打印查看网页内容 print('查看网页内容:',rqg.text)
查看结果类型: <class ’requests.models.Response’> 状态码: 200 编码 : ISO-8859-1 响应头: {’Date’: ’Mon, 18 Nov 2019 04:45:49 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’}
requests.get("http://httpbin.org/get") #GET请求 requests.post("http://httpbin.org/post") #POST请求 requests.put("http://httpbin.org/put") #PUT请求 requests.delete("http://httpbin.org/delete") #DELETE请求 requests.head("http://httpbin.org/get") #HEAD请求 requests.options("http://httpbin.org/get") #OPTIONS请求你可以通过 requests 库发送所有的 http 请求:
requests.get("http://httpbin.org/get") #GET请求 requests.post("http://httpbin.org/post") #POST请求 requests.put("http://httpbin.org/put") #PUT请求 requests.delete("http://httpbin.org/delete") #DELETE请求 requests.head("http://httpbin.org/get") #HEAD请求 requests.options("http://httpbin.org/get") #OPTIONS请求
import requests r = requests.get('http://httpbin.org/get') print(r.text) { "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.24.0", "X-Amzn-Trace-Id": "Root=1-5fb5b166-571d31047bda880d1ec6c311" }, "origin": "36.44.144.134", "url": "http://httpbin.org/get" }
可以发现,我们成功发起了 GET 请求,返回结果中包含请求头、URL 、IP 等信息。那么,对于 GET 请求,如果要附加额外的信息,一般怎样添加呢?
import requests response = requests.get(’https://www.zhihu.com/explore’) print(f"当前请求的响应状态码为:{response.status_code}") print(response.text)当前请求的响应状态码为: 400 <html> <head><title>400 Bad Request</title></head> <body bgcolor= "white" > <center><h1>400 Bad Request</h1></center> <hr><center>openresty</center> </body> </html> 这里发现响应的状态码为 400 ,说明我们请求失败了,因为知乎已经发现了我们是一个爬虫, 因此需要对浏览器进行伪装,添加对应的 UA 信息。
import requests 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/explore’, headers=headers) print(f"当前请求的响应状态码为:{response.status_code}") # print(response.text)
----------------------------------------
当前请求的响应状态码为: 200 <!doctype html> ....... 这里我们加入了 headers 信息,其中包含了 User-Agent 字段信息,也就是浏览器标识信息。很明显我们伪装成功了!这种伪装浏览器的方法是最简单的反反爬措施之一。 GET 参数说明: 携带请求头发送请求的方法 requests.get(url, headers=headers) - headers 参数接收字典形式的请求头 - 请求头字段名作为 key ,字段对应的值作为 value 练习 请求百度的首页 https://www.baidu.com , 要求携带 headers, 并打印请求的头信息 ! 解import requests url = 'https://www.baidu.com' headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} # 在请求头中带上User-Agent,模拟浏览器发送请求 response = requests.get(url, headers=headers) print(response.content) # 打印请求头信息 print(response.request.headers)
import requests headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} url = ’https://www.baidu.com/s?wd=python’ response = requests.get(url, headers=headers)
import requests headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} # 这是目标url # url = ’https://www.baidu.com/s?wd=python’ # 最后有没有问号结果都一样 url = ’https://www.baidu.com/s?’ # 请求参数是一个字典 即wd=python kw = {’wd’: ’python’} # 带上请求参数发起请求,获取响应 response = requests.get(url, headers=headers, params=kw) print(response.content)
通过运行结果可以判断,请求的链接自动被构造成了:
http://httpbin.org/get?key2=value2&key1=value1 。 另外,网页的返回类型实际上是 str 类型,但是它很特殊,是 JSON 格式的。所以,如果想直 接解析返回结果,得到一个字典格式的话,可以直接调用 json() 方法。示例如下:import requests r = requests.get("http://httpbin.org/get") print( type(r.text)) print(r.json()) print( type(r. json()))--------------------------------------------------------------- < class ’str’ > { ’args’ : {}, ’headers’ : { ’Accept’ : ’*/*’ , ’Accept-Encoding’ : ’gzip, deflate’ , ’Host’ : ’httpbin.org’ , ’User-Agent’ : ’python-requests/2.24.0’ , ’X-Amzn-Trace-Id’ : ’ Root=1-5fb5b3f9-13f7c2192936ec541bf97841’ }, ’origin’ : ’36.44.144.134’ , ’url’ : ’ http://httpbin.org/get’ } < class ’dict’ > 可以发现,调用 json() 方法,就可以将返回结果是 JSON 格式的字符串转化为字典。但需要注意的是,如果返回结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder.JSONDecodeError 异常。 补充内容,接收字典字符串都会被自动编码发送到 url ,如下
import requests headers = {’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36’} wd = ’张三同学’ pn = 1 response = requests.get(’https://www.baidu.com/s’, params={’wd’: wd, ’pn’: pn}, headers=headers) print(response.url)# 输出为: https://www.baidu.com/s?wd=%E9%9B%A8%E9%9C%93%E5%90%8 C%E5%AD%A6&pn=1 # 可见 url 已被自动编码 上面代码相当于如下代码, params 编码转换本质上是用 urlencode
import requests from urllib.parse import urlencode headers = {’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit /537.36 (KHTML, like Gecko) wd = ’张三同学’ encode_res = urlencode({’k’: wd}, encoding=’utf-8’) keyword = encode_res.split(’=’)[1] print(keyword) # 然后拼接成url url = ’https://www.baidu.com/s?wd=%s&pn=1’ % keyword response = requests.get(url, headers=headers) print(response.url)# 输出为: https://www.baidu.com/s?wd=%E9%9B%A8%E9%9C%93%E5 %90%8C%E5%AD%A6&pn=1
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/explore’, headers=headers) result = re.findall("(ExploreSpecialCard-contentTitle|ExploreRoundtableCard questionTitle).*?>(.*?)</a>", response.text) print([i[1] for i in result])----------------------- [ ’ 西安回民街有什么好吃的? ’ , ’ 西安有哪些值得逛的宝藏店铺? ’ , ’ 西安哪些商圈承载着你的青春?’ , ’ 你有哪些好的驾驶习惯可以分享? ’ , ’ 有哪些只有经验丰富的司机才知道的驾驶技巧?’ , ’ 有车的注意了,这些开车知识每个人都要掌握,关键时刻能救命 ’ , ’ 欢迎着陆!知乎宇宙成员招募通告’ , ’ 星球登陆问题:给你十块钱穿越到未来,怎样才能混得风生水起?’ , ’ 星球登陆问题:知乎宇宙中的「超能量」你最希望拥有哪一种?你会如何使用它?’ , ’ 挪威三文鱼,原产地至关重要 ’ , ’ 挪威最吸引人的地方有哪些? ’ , ’ 生活在挪威是一种 什么体验?’ , ’ 如何看待京东方 AMOLED 柔性屏量产?未来前景如何? ’ , ’ 柔性屏能不能给手机行业带来革命性的影响?’ , ’ 什么是超薄可弯曲柔性电池?会对智能手机的续航产生重大影响吗?’ , ’ 美术零基础怎样才能学好美术,在艺考中取得高分? ’ , ’ 清华美院被鄙视吗 ?’ , ’ 艺术生真的很差吗? ’ , ’ 人应该怎样过这一生? ’ , ’ 人的一生到底该追求什么? ’ , ’ 人类知道世界的终极真理后会疯掉吗?’ , ’ 焦虑是因为自己能力不够吗? ’ , ’ 社交恐惧症是怎样的一种体验?’ , ’ “忙起来你就没时间抑郁了”这句话有理么? ’ ] 这里我们加入了 headers 信息,其中包含了 User-Agent 字段信息,也就是浏览器标识信息。如果不加这个,知乎会禁止抓取。 抓取二进制数据在上面的例子中,我们抓取的是知乎的一个页面,实际上它返回的是一个 HTML 文档。如果想抓去图片、音频、视频等文件,应该怎么办呢?图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。所以,想要抓取它们,就要拿到它们的二进制码。下面以 GitHub 的站点图标为例来看一下:
import requests response = requests.get("https://github.com/favicon.ico") with open(’github.ico’, ’wb’) as f: f.write(response.content)Response 对象的两个属性,一个是 text, 另一个是 content. 其中前者表示字符串类型文本,后者表示 bytes 类型数据 , 同样地,音频和视频文件也可以用这种方法获取。
import requests url = ’https://www.baidu.com’ req = requests.get(url) print(req.cookies) # 响应的cookies for key, value in req.cookies.items(): print(f"{key} = {value}")<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> BDORZ = 27315 这里我们首先调用 cookies 属性即可成功得到 Cookies ,可以发现它是 RequestCookieJar 类型。然后用 items() 方法将其转化为元组组成的列表,遍历输出每一个 Cookie 的名称和值,实现 Cookie 的遍历解析。
import requests import re # 构造请求头字典 headers = { # 从浏览器中复制过来的User-Agent "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.*?>(.*?)</div>’,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.*?>(.*?)</div>’,response.text) print(response.status_code) print(data)------------------------------------ 200 [] 在打印的输出结果中为空 , 两者对比 , 则成功利用 headers 参数携带 cookie ,获取登陆后才能访问的页面!
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.*?>(.*?)</div>’,resp.text) print(resp.status_code) print(data)-------------------------------------- 200 [ ’python 中该怎么把这种 id 不同但是 class 相同的方法写成一个整合呀? ’ , ’ 父母没有能力给我 买电脑的钱,我该怎么办? ’ , ’ 一句话形容一下你现在的生活状态? ’ ]
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.*?>(.*?)</div>’,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 字段了。测试后,发现同样可以正常登录知乎。
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.*?>(.*?)</div>',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)
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]>
import requests payload = {’key1’: ’value1’, ’key2’: ’value2’} req = requests.post("http://httpbin.org/post", data=payload) print(req.text)
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 的类型,默认 applica tion/json 。 用 data 参数提交数据时, request.body 的内容则为 a=1&b=2 的这种形式, 用 json 参数提交数据时, request.body 的内容则为 ’"a": 1, "b": 2’ 的这种形式
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 三方库。
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"))
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)可以使用文本对比工具进行校对 !
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
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 是不支持的。现在都很少有这种了网址了 !
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) # 响应的历史
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 库是一个非常优秀的字符串 / 文件编码检测模块
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
# 导入相关的库 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’ } 相关资源: