从小白开始学python-网络爬虫四 (cookie、session、实战:下载图片)

cookie简介

我们在清理浏览器信息的时候都会有这么一个选项:清除cookie和保存的网站数据

在这里插入图片描述
这是因为大多数网站都倾向于使用cookie来处理身份验证

我们可以通过post提交表单后返回一个私有的cookie

然后通过这个cookie来使用get登录到刚刚本来需要提交表单的网站

import requests

"""该程序用于模拟登录开心网"""
url = 'http://login.kaixin001.com/'    # 目标地址
params = {
    'email': '******@163.com',
    'password': '******'
}    # 表单
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                         '(KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'}
# 构造header模拟登录

def get_http(url, params, headers):
    html = requests.post(url, data=params, headers=headers)#提交表单
    print(html.status_code)# 返回状态码
    print(html.cookies)# 返回cookie
    r = requests.get(url, params={'p': 'protected'}, cookies=html.cookies)
    # 使用cookie再次登陆
    print(r.text)    # 打印爬取的登录后的内容


get_http(url, params, headers)

cookie十分重要!!!不要轻易泄露自己的私人cookie给他人哟!


session对象

我们可以创建session对象来完成get和post的操作,而且操作会更加方便:

my_session = requests.Session()
my_session.headers.update(headers)    # 一次性将该对象的全局头字段设置好
r = my_session.post(url, params)    # 在后台自动处理cookie
r = my_session.get(url)
print(r.text)
my_session.cookies.clear()    # 用于清理cookie

实战:下载图片

当然我们可以通过右击鼠标另存为来保存一张图片
但是使用代码来下载图片还是非常使用的特别是批量下载图片时

这里的图片一般是二进制数据,不能使用Unicode文本表示,所以我们应该使用content来替代text属性,下面我们看看如何将一张图片保存到本地吧:

from bs4 import BeautifulSoup
import requests

target = 'http://www.netbian.com/desk/22801.htm'  
# 首先我们找到图片的网页
# 但是这个并不是我们要下载的内容,因为我们要下载的图片格式是jpg或者其他图片格式
# 所以我们需要检查元素找到它实际所在的地址

get_url = requests.get(url=target)

get_url.encoding = 'utf-8'  # 编码格式

test = get_url.text

bs = BeautifulSoup(test, 'html.parser')

i = bs.find(name='div', attrs={'class':'pic'})    # 通过find来查找

tar = i.find_next('img').get('src')    # 得到图片真正存在的地址

r = requests.get(str(tar))    # 发送请求

with open('image.jpg','wb') as my_file:    # 图片下载
    my_file.write(r.content)   # 这里是content而不是text
print('图片下载完毕!')

我们就可以通过爬虫下载图片了

下载图片展示:
在这里插入图片描述
我们掌握下载一张图片的方法后,我们就可以通过构造地址的方法,批量下载图片了(大多数图片网站的图片地址是有规律的)

关于bs的如何快速查找到我们想要的信息的技巧,有机会再细说吧
当然我们还可以通过lxml来更快的定位图片的信息

码字不易,点赞收藏下哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值