requests库api解释:
requests.get(url, params=None, **kwargs)
url : 拟获取页面的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs: 12个控制访问的参数
request.get()返回response对象
Response对象属性
属性 | 说明 |
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
利用request.get()返回response对象爬出单个京东页面信息
import requests
url = "https://item.jd.com/21508090549.html"
try:
r = requests.get(url)
r.raise_for_status() #检验http状态码是否为200
r.encoding = r.apparent_encoding#识别页面正确编码
print(r.text[:1000])
except:
print("爬取失败")
如果用上面的代码访问亚马逊页面,就会爬取到错误信息,因为亚马逊robots协议中定义了不允许非主流浏览器对页面进行访问,所以要对request访问信息中的‘user-agent’设置
import requests
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
#kv = {'user-agent':'Mozilla/5.0'}#假装访问浏览器为Mozilla/5.0
r = requests.get(url)
r.raise_for_status()#检验http状态码是否为200
r.encoding = r.apparent_encoding#识别页面正确编码
print(r.text[:1000])
except:
print("爬取失败")
利用代码模仿百度/360搜索
需要在url上添加参数百度的'wd=..'/360是'q=...'
import requests
url = "http://www.baidu.com/s"
keyword="python"
try:
kv = {'wd':key}
r = requests.get(url,params=kv)
print(r.request.url)
r.raise_for_status()#检验http状态码是否为200
r.encoding = r.apparent_encoding#识别页面正确编码
print(len(r.text))#由于信息量可能特别大,这里只输出长度
except:
print("爬取失败")
爬取并保存图片
import requests
import os
url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1540201265460&di=64720dcd3bbc24b7d855454028173deb&imgtype=0&src=http%3A%2F%2Fpic34.photophoto.cn%2F20150105%2F0005018358919011_b.jpg"
root = "D://pics//"
path = root + url.split('.')[-2]+'.'+url.split('.')[-1]#得到文件名,生成文件路径
if not os.path.exists(root):
os.mkdir(root)#如果目录不存在,创建目录
if not os.path.exists(path):#如果文件不存在爬取文件并保存
r = requests.get(url)
with open(path,'wb') as f:#打开文件对象
f.write(r.content)#写入爬取的图片
f.close()
print("文件保存成功")
else:
print("文件已存在")