我们了解到了urllib库的基本用法,其中确实有不方便的地方,实现POST,PUT请求不太方便,处理网页验证和Cookie也不是很简单,为了方便的实现这些操作,产生了更为强大的库-----requests
1.首先我们先来了解requests的基本用法
以百度官网为例,来获取里面的cookie信息,响应类型,响应状态码,响应体的内容、类型,请求地址、请求头等等
import requests
url = 'https://www.baidu.com/'
r = requests.get(url=url)
# 响应类型
print(type(r))
# 响应状态码
print(r.status_code)
# 响应体的类型
print(type(r.text))
# 响应的内容
print(r.text[:100])
# 响应的Cookie值
print(r.cookies)
# 编码方式
print(r.encoding)
# # 二进制文件
content = r.content
print(content)
# 请求地址
print(r.url)
# 请求头
print(r.headers)
运行结果如下图
那么对网页的内容得到了基本的获取,接下来使用requests来提取保存一张图片(网页上随便挑选一张)
#保存图片以二进制的方法
import requests
img_list = 'https://pic.netbian.com/uploads/allimg/220725/180234-165874335406f6.jpg'
r = requests.get(url=img_list)
content = r.content
with open('1.jpg','wb') as f:
f.write(content)
2.requests的GET请求
1.使用百度搜索周杰伦当网页的请求
# https://www.baidu.com/s?tn=78000241_39_hao_pg&ie=utf-8&wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
import requests
url = 'https://www.baidu.com/s'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.7062 SLBChan/105',
}
params = {
'query':'周杰伦'
}
response = requests.get(url=url,headers=headers,params=params)
print(response.text)
通过直接get请求加入参数能够得到网页响应的内容
2.请求普通的网页并且拿到里面的内容(以Scrape | Movie网页为例拿到标题)
这个例子中我们用最基础的正则表达式来匹配所有的标题内容。关于正则表达式,以后会在详细的介绍。
import requests
import re
url = 'https://ssr1.scrape.center/'
r = requests.get(url=url)
# 正则匹配
pattern = re.compile('<h2.*?>(.*?)</h2>', re.S)
# 从网页源码中找到匹配项
titles = re.findall(pattern, r.text)
print(titles)
运行结果如下:
3.requests的POST请求
以百度翻译为例,来使用post请求
# 百度翻译
import requests
url ='https://fanyi.baidu.com/sug'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.7062 SLBChan/105',
}
data = {
'kw': 'spider',
}
response = requests.post(url=url,headers=headers,data=data)
print(response.json())
运行结果也就是spider的意思和拓展
总结
requests 发起get请求
params 进行传递,不需要请求对象定制
requests 发起post请求
data 进行传递,不需要请求对象定制
4.代理设置
某些网站在测试的时候请求几次,都能正常获取内容。但是一旦开始大规模爬取,面对大规模且频繁的请求时,这些网站就可能弹出验证码,或者跳转到登录认证页面,更甚者可能会直接封禁客户端的IP,导致在一定时间段内无法访问。
import requests
proxies={
'http':'http://10.11.12.13.1025',
'https':'http://10.11.12.13.1025'
}
requests.get('https://www.httpbin.org/get',proxies=proxies)
当然直接运行是无效的,因为这个代理可能是无效的,可以寻找有效的代理来替换
总结:本节的requests库的使用就到这了,是不是感觉要简单一些,方便一点。后续我会补充在实战中requests库所完成的一个网站的爬取。
本文含有隐藏内容,请 开通VIP 后查看