一.GET
1.requests 这个库提供了一个 get 方法,调用这个方法,并传入对应的 URL 就能得到网页的源代码
2.URL后面是可以跟上一些参数的,如果想添加两个参数,比如其中name是germey,age是25,URL就可以写成如下内容:http://httpbin.org/get?name=germey&age=25
3.把URL参数通过字典的形式传给get方法的params参数,通过返回信息我们可以判断,请求的链接自动被构造成了:http://httpbin.org/get?age=22&name=ermey
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Fri Apr 17 22:34:59 2020 4 5 @author: ZKYAAA 6 """ 7 8 9 import requests 10 11 print('-----------------------实列1-----------------') 12 #GET发起请求 13 r1=requests.get("https://home.cnblogs.com/u/ZKYAAA/") 14 print(r1.text) 15 16 print('-----------------------实列2-----------------') 17 #返回Headers,url,ip等 18 r2=requests.get("http://httpbin.org/get") 19 print(r2.text) 20 21 print('-----------------------实列3-----------------') 22 #URL请求后面可以跟一些参数,构造请求如下 23 r3=requests.get("http://httpbin.org/get?name=germey&age=25") 24 print(r3.text) 25 26 print('-----------------------实列4-----------------') 27 #params参数的使用,把URL通过字典的形式传给get方法的params参数 28 #通过返回信息可以知道请求的链接被直接构造成URL 29 data={ 30 'name':'germey', 31 'age':'25' 32 } 33 r4=requests.get("http://httpbin.org/get",params=data) 34 print(r4.text)
二.JSON
1.网页的返回类型实际上是 str 类型,但是它很特殊,是 JSON 格式的。所以,如果想直接解析返回结果,得到一个 JSON 格式的数据的话,可以直接调用 json 方法。
2.调用 json 方法,就可以将返回结果是 JSON 格式的字符串转化为字典
3.如果返回结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder.JSONDecodeError 异常。
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Fri Apr 17 23:33:17 2020 4 5 @author: ZKYAAA 6 """ 7 8 9 import requests 10 import re 11 12 print('-----------------------实列1-----------------') 13 #JSON直接解析返回结果,得到一个JSON格式的数据,直接调用json方法 14 #下面博客网站返回结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder.JSONDecodeError 异常。 15 r=requests.get("https://home.cnblogs.com/u/ZKYAAA/") 16 print(type(r.text)) 17 print(r.json()) 18 print(type(r.json())) 19 20 print('-----------------------实列2-----------------') 21 #正则表达式 22 r=requests.get("https://static1.scrape.cuiqingcai.com/") 23 pattern=re.compile('<h2.*?>(.*?)</h2>',re.S) 24 titles=re.findall(pattern,r.text) 25 print(titles)
三.抓取二进制数据
1.打印 Response 对象的两个属性,一个是 text,另一个是 content。运行结果前两行是 r.text 的结果,最后一行是 r.content 的结果。前者出现了乱码,后者结果前带有一个 b,这代表是 bytes 类型的数据.
2.将提取到的信息保存下来,用 open 方法,它的第一个参数是文件名称,第二个参数代表以二进制的形式打开,可以向文件里写入二进制数据。
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sat Apr 18 00:07:43 2020 4 5 @author: ZKYAAA 6 """ 7 8 9 import requests 10 11 print('-----------------------实列1-----------------') 12 #得到乱码二进制文件 13 r=requests.get('https://github.com/favicon.ico') 14 print(r.text) 15 print(r.content) 16 17 print('-----------------------实列2-----------------') 18 #用 open 方法,得到图片 19 r=requests.get('https://github.com/favicon.ico') 20 with open('favicon.ico','wb') as f: 21 f.write(r.content)
四.添加headers