爬虫用Cookie登录网页
来源:互联网 发布:鼠标箭头美化软件 编辑:程序博客网 时间:2024/05/29 10:52
最近在爬取豆瓣的数据时发现了一些问题。因为要做一个爬虫,爬取用户读过的书以及对书的评分。但是在进行网页的分析时却出现了点问题。
当浏览器打开用户读书记录的链接时是没有任何问题的,但是用requests库来进行网页爬取时却出现了问题。
以https://book.douban.com/people/…/collect这个链接为例,获取这个链接的html源码,一般都是这样写:
import requestsurl = 'https://book.douban.com/people/.../collect'r = requests.get(url)print(r.text)
运行结果却是:
<html><head><title>403 Forbidden</title></head><body bgcolor="white"><center><h1>403 Forbidden</h1></center><hr><center>nginx</center></body></html>
网页却能正常访问:
经过百度后发现,这是因为在爬取网页时没有传入Cookie,服务器不能识别用户身份,网页不能显示给没有用户身份的请求,所以网页源码被隐藏了。
因此,要在请求时加上Cookie,如何获取Cookie?
不能https://book.douban.com/people/…/collect这个链接中直接获取Cookie,因为这个链接在缺少Cookie的情况下根本不能正常访问。但是可以登录豆瓣官网来获取Cookie,登录豆瓣官网不需要Cookie。
import urllib.requestimport http.cookiejar/*设置文件来存储Cookie*/filename = 'cookie.txt'/*创建一个MozillaCookieJar()对象实例来保存Cookie*/cookie = http.cookiejar.MozillaCookieJar(filename)/*创建Cookie处理器*/handler = urllib.request.HTTPCookieProcessor(cookie)/*构建opener*/opener = urllib.request.build_opener(handler)response = opener.open("https://www.douban.com/")cookie.save(ignore_discard=True, ignore_expires=True)
打开cookie.txt文件会发现cookie已被保存。
这样在访问用户读过的书的链接时,从文件中读取Cookie,在进行网页请求时加上Cookie就行了。
import requestsimport http.cookiejarcookie = http.cookiejar.MozillaCookieJar()/*加载Cookie*/cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)url = 'https://book.douban.com/people/.../collect'r = requests.get(url, cookies=cookie)print(r.text)
运行结果:
<!DOCTYPE html><html lang="zh-cmn-Hans" class=" book-new-nav"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> 读过的书(219)</title><script>!function(e){var o=function(o,n,t){var c,i,r=new Date;n=n||30,t=t||"/",r.setTime(r.getTime()+24*n*60*60*1e3),c="; expires="+r.toGMTString();for(i in o)e.cookie=i+"="+o[i]+c+"; path="+t},n=function(o){var n,t,c,i=o+"=",r=e.cookie.split(";");for(t=0,c=r.length;t<c;t++)if(n=r[t].replace(/^\s+|\s+$/g,""),0==n.indexOf(i))return n.substring(i.length,n.length).replace(/\"/g,"");return null},t=e.write,c={"douban.com":1,"douban.fm":1,"google.com":1,"google.cn":1,"googleapis.com":1,"gmaptiles.co.kr":1,"gstatic.com":1,"gstatic.cn":1,"google-analytics.com":1,"googleadservices.com":1},i=function(e,o){var n=new Image;n.onload=function(){},n.src="https://www.douban.com/j/except_report?kind=ra022&reason="+encodeURIComponent(e)+"&environment="+encodeURIComponent(o)},r=function(o){try{t.call(e,o)}catch(e){t(o)}},a=/<script.*?src\=["']?([^"'\s>]+)/gi,g=/http:\/\/(.+?)\.([^\/]+).+/i;e.writeln=e.write=function(e){var t,l=a.exec(e);return l&&(t=g.exec(l[1]))?c[t[2]]?void r(e):void("tqs"!==n("hj")&&(i(l[1],location.href),o({hj:"tqs"},1),setTimeout(function(){location.replace(location.href)},50))):void r(e)}}(document);</script>
这样就成功地得到了html源码,就可以进行分析了。
参考文章:静觅 » Python爬虫入门六之Cookie的使用
PS:链接还是去豆瓣官网上找一个用户读过的书的链接吧。
阅读全文
0 0
- 爬虫用Cookie登录网页
- python3爬虫 - cookie登录实战
- python3爬虫 - 利用浏览器cookie登录
- python爬虫 利用cookie登录人人网
- 网页爬虫之cookie自动获取
- Python3爬虫之五网页下载器的几种方法【Python使用cookie模拟登录CSDN】
- Android 网页登录 POST 请求 保存 COOKIE
- Android 网页登录 POST 请求 保存 COOKIE
- Android 网页登录 POST 请求 保存 COOKIE
- python实现简单爬虫模拟登录淘宝(cookie简介)
- [python 爬虫学习]利用cookie模拟网站登录
- Webmagic 爬虫之通过cookie进行页面登录
- cookie在爬虫方面的应用-模拟登录
- python爬虫设置cookie模拟登录微博方法
- python爬虫之cookie方式自动登录巴比特网
- python爬虫之urllib.request和cookie登录CSDN
- 网页爬虫-用PHP的拓展库curl实现模拟登录慕课网
- Python3.x爬虫教程:爬网页、爬图片、自动登录
- 我的学习记录29
- python安装easyinstall/pip出错
- 一中OJ #3509 七的倍数 [USACO Jan16,洛谷P3131] | 同余前缀和 | 解题报告
- Lua 面向对象
- 数据库的三大范式知识
- 爬虫用Cookie登录网页
- 慕课网《HTML+CSS基础课程》笔记总结(五)
- OpenGL 数据类型
- HDU2119-Matrix
- XListView 下拉刷新、上拉加载功能
- Android MemInfo
- JZOJ5461. 【NOIP2017提高A组冲刺11.8】购物
- Java 内存模型笔记
- 【项目管理与构建】Nexus的详细介绍以及安装(四)