Request库
获取http网页的主要方法,对应http的get。
requests.get(url, params=None, **kwargs)
用于发送查询字符串,一般为字典或者字节流格式。
1 2 3 4 5 6 7
| >>> url = 'https://www.baidu.com/s' >>> values = { 'wd':'python' } >>> resp = requests.get(url, params=values) >>> resp.url 'https://www.baidu.com/s?wd=python'
|
可选参数。
属性 |
写法 |
作用 |
headers |
headers = {‘User-Agent’:xxx, ‘Cookie’:xxx, ‘Referer’:xxx} |
其实这里是伪装成浏览器 header是浏览器向服务器发送的一个头信息,上面的代码就是发送了浏览器自己的型号。 |
auth |
auth = (‘username’, ‘password’) |
Web客户端验证参数,用于网站的用户名和密码验证。 |
verify |
verify = False/True |
证书认证参数,python去访问一个没有经过CA证书认证的因特网服务类型是https的网站, 那么就会抛出一个SSLError 异常,进而我们就无法正常访问这个网站。此时!我们就可以通过设置verify参数为False,忽略证书认证,访问网站。 |
proxies |
proxies = {‘协议’:’协议://IP:端口号’} |
代理IP参数,爬虫时被封IP可以使用代理IP继续爬取。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| """ 7.9 Kevin 爬取一个百度搜索的内容 """ import requests s = input("请输入需要查询的内容")
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' }
kv = {'wd' : s} url = 'https://www.baidu.com/s' r = requests.get(url, params=kv, headers=headers) r.encoding = r.apparent_encoding print(r.url) print(r.text)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| """ 7.13 Kevin 处理Cookie模拟用户登录
1.登录 -> 得到Cookie 2.带着Cookie 去请求书架的url -> 书架上的内容
必须把以上操作连起来 可以使用session进行请求 -> session可以认为是一连串的请求,在这个过程中Cookie不会消失 """ import requests
session = requests.session()
url = 'https://passport.17k.com/ck/user/login'
resp = session.post(url, data={'loginName': '13433947627', 'password': 'EasonChan0830'})
resp2 = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919') print(resp2.json())
headers = { 'Cookie': 'XXX' }
resp = requests.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919', headers= headers) print(resp.json())
|
向网页提交post申请的方法,对应http的post。
requests.post(url, data={key: value}, **kwargs)
字典,元组列表,字节或要发送到指定URL的文件对象。
1 2 3 4 5
| >>> url = 'https://fanyi.baidu.com' >>> values = { 'wd':'python' } >>> resp = requests.post(url, data=values)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| """ 7.9 Kevin 爬取一个百度翻译的内容 """
import requests
s = input('请输入你需要翻译的内容\n') params = {'kw': s} headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'} url = 'https://fanyi.baidu.com/sug'
resp = requests.post(url, data=params) print(resp.json())
|
另一个实例(爬取豆瓣电影排行榜):
1.进入douban.com打开控制台观察浏览器控制台的network。
2.进入Fetch/XDR观察(简化资源视图),从中找到所需的json库的url等属性,观察request method(get/post)
3.复制url,url”?”后方的可以通过payload得到,post为getdata,get为parameters,通过字典赋值可以简化url。
4.通过requests.get()/requests.post()得到resp,用resp.text测试是否爬取正常,一般反爬需要加入Headers属性,中间的User-Agent仿造浏览器访问界面。
实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| """ 7.11 Kevin 豆瓣电影排行榜爬虫 """ import requests
url = 'https://movie.douban.com/j/chart/top_list' params = { 'type': '24', 'interval_id': '100:90', 'action': "", 'start': '0', 'limit': '60' } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' } resp = requests.get(url, params=params, headers=headers) print(resp.json()) resp.close()
|