抱歉,你查看的文章不存在

Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接

在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取。这里就需要使用到Cookie。

使用Cookie进行模拟登录

现在大多数的网站都是使用Cookie跟踪用户的登录状态,一旦网站验证了登录信息,就会将登录信息保存在浏览器的cookie中。网站会把这个cookie作为验证的凭据,在浏览网站的页面是返回给服务器。 因为cookie是保存在本地的,自然cookie就可以进行篡改和伪造,暂且不表,我们先来看看Cookie长什么样子。 打开网页调试工具,随便打开一个网页,在“network”选项卡,打开一个链接,在headers里面:

我们复制出来看看:

__guid=137882464.208312339030071800.1455264073383.613;
 __huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;
 __hsid=825c7462cc8195a5; 
somultiswitch=1;
 __seedSign=68; 
count=1; sessionID=132730903.3074093016427610600.1483758834211.764;
 piao34=1;
city_code=101280101;
customEng=1-7

由一个个键值对组成。 接下来,我们以看看豆(http://kankandou.com)的一本书籍的详情页为例,讲解一下Cookie的使用。 看看豆是一个电子书下载网站,自己Kindle上的书多是从这上面找寻到的。 示例网址为:https://kankandou.com/book/view/22353.html 正常情况下,未登录用户是看不到下载链接的,比如这样:

隐藏了书籍的下载链接。 其头信息如下:

我们再看看登录之后的页面:

下载链接已经显示出来了,我们看看头信息的Cookie部分

很明显地与之前未登录状态下的Cookie有区别。 接下来,我们按照上一章爬取腾讯新闻的方法,对示例网址(https://kankandou.com/book/view/22353.html)进行HTTP请求:

# coding:utf-8
import requests
from bs4 import BeautifulSoup
url = 'https://kankandou.com/book/view/22353.html'wbdata = requests.get(url).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

结果如下:

我们从中找到下载链接存在的栏目“书籍导购”的HTML代码:

<h2 class="title">书籍导购</h2><div class="object"><div class="object-files"><div class="amazon"><a href="http://www.amazon.cn/gp/search?ie=UTF8&camp=536&creative=3200&index=books&keywords=宇宙是猫咪酣睡的梦&linkCode=ur2&tag=kkd8-23" target="_blank" title="如果您喜欢《宇宙是猫咪酣睡的梦》这本书,请去亚马逊购买。">去亚马逊购买《宇宙是猫咪酣睡的梦》</a></div></div></div>

如同我们在未登录状态使用浏览器访问这个网址一样,只显示了亚马逊的购买链接,而没有电子格式的下载链接。 我们尝试使用以下登录之后的Cookie: 使用Cookie有两种方式,

1、直接在header头部写入Cookie

完整代码如下:

# coding:utf-8
import requests
from bs4 import BeautifulSoup

cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''header = {    
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',    
'Connection': 'keep-alive',       
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',  
'Cookie': cookie}

url = 'https://kankandou.com/book/view/22353.html'wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

上述代码返回了对页面(https://kankandou.com/book/view/22353.html)的响应, 我们搜索响应的代码,

红色椭圆的部分与未带Cookie访问是返回的HTML一致,为亚马逊的购买链接, 红色矩形部分则为电子书的下载链接,这是在请求中使用的Cookie才出现的 对比实际网页中的模样,与用网页登录查看的显示页面是一致的。 功能完成。接下来看看第二种方式

2、使用requests的cookies参数

完整代码如下:

# coding:utf-8
import requests
from bs4 import BeautifulSoup

cookie = {"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",          
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",          
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",          
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"}

url = 'https://kankandou.com/book/view/22353.html'
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

如此获取到的也是登录后显示的HTML:

这样,我们就轻松的使用Cookie获取到了需要登录验证后才能浏览到的网页和资源了。 这里只是简单介绍了对Cookie的使用,关于Cookie如何获取,手动复制是一种办法,通过代码获取,需要使用到Selenium,接下来的章节会讲解,这里暂且不表。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

州的先生

4 篇文章54 人订阅

相关文章

来自专栏Python与爬虫

爬虫入门到精通-爬虫之异步加载(实战花瓣网)

本文章属于爬虫入门到精通系统教程第八讲 本次我们会讲解两个知识点 异步加载 headers中的Accept 本次我们要抓取的是花瓣网美女照片美女花瓣,陪你做生活...

49915
来自专栏腾讯云账号与权限

【云端安全小建议】-如何正确的使用云审计

云端安全小建议的系列文章,是由腾讯云账号与权限团队的一线开发人员推出的关于用户安全的小建议。该系列文章旨在帮助腾讯云用户能够充分利用腾讯云提供的产品特性,安全的...

6.4K4
来自专栏coding

django2实战4.创建文章列表页和详情页url适配自定义模型管理器在view中写业务逻辑新建模板文件添加分页功能

我们已经知道如何操作文章表的数据,接下来要将这些数据用界面显示出来。这就需要用到django的view层负责处理http请求,并将数据传给template模板进...

2243
来自专栏七夜安全博客

老话新谈:QQ快速登录分析以及风险反思

众所周知,Tencent以前使用Activex的方式实施QQ快速登录,现在快速登录已经不用控件了。那现在用了什么奇葩的方法做到Web和本地的应用程序交互呢?其实...

2414
来自专栏落影的专栏

iOS开发笔记(五)

前言 社会的模式很多是重复的,当你做一样事情很擅长时,与之类似的事情也能触类旁通。 正文 Code开发 1、delegate的trick 很多人习惯在调用de...

4974
来自专栏FreeBuf

如何逆向破解HawkEye keylogger键盘记录器,进入攻击者邮箱?

这一切要从一次恶意邮件攻击活动开始。下图为我们最近监测到的一个以恶意文件为发送附件的邮件攻击,请注意邮件信息中的英语写作水平是多么差劲,其实,这也是恶意邮件的一...

2848
来自专栏别先生

雅虎Yahoo 前段优化 14条军规

Yahoo 14条 雅虎十四条 腾讯前端设计的Leader推荐我背熟的。请大家都能好好学习,不要像我一样一扫而过,好好的记下来!不仅仅是晓得一些CSS x...

20410
来自专栏FreeBuf

MSF外网持久控制Android手机并渗透测试局域网

以前经常看Freebuf,学到了不少东西,现在想给入门的同学提供一点微小的帮助。以前老是不知道如何在外网使用msf这个神器,自己查了查资料,总结了一点自己的认识...

5599
来自专栏Coco的专栏

【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

2478
来自专栏北京马哥教育

centos7.0体验与之前版本的不同

今天下午,没事干,在一台机器上装了一个centos7玩一玩,发现与之前版本有很大不同,不知道rhel7是不是也是这样,毕竟现在centos属于redhat了。 ...

2317

扫码关注云+社区

领取腾讯云代金券