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继续爬取。

img

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内容可以从控制台的Network查看
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的具体键值对可以通过具体网页观察url
kv = {'wd' : s}
url = 'https://www.baidu.com/s'
r = requests.get(url, params=kv, headers=headers)
r.encoding = r.apparent_encoding #r.encoding = 'utf-8'
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()

# 1.登录
url = 'https://passport.17k.com/ck/user/login'

resp = session.post(url, data={'loginName': '13433947627', 'password': 'EasonChan0830'})
# print(resp.cookies) # 看cookie

# 2.数据处理
# 刚刚的会话session中是有cookie的
resp2 = session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
print(resp2.json())

# 以上可以用下面内容代替
headers = {
'Cookie': 'XXX' # 从控制台Header里面复制
}

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)

与get类似。

与get类似。

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 = {
#其中start和limit属性可切换,start为排行榜的开始位数-1,limit为一次性爬取的电影数量
'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() #关闭请求