关于Robots协议

Robots协议也称为爬虫协议,是网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。因为我们如果无限制的使用爬虫爬取信息的话,且不说技术上能否突破某些网站上的发爬虫措施,如果毫无限制的进行爬取,再加上个分布式和多线程,则有可能导致把访问网站跑崩掉(虽然这种概率很小);但是这也说明了我们需要对我们的爬虫进行规范化处理,只能爬取我们需要的别人愿意给的数据,这样就不会违反一些法律。
我们可以在任何一个网站上加上/robots.txt查看这个网站对于爬虫是否有限制,在这里举一个知乎的例子:https://www.zhihu.com/robots.txt,出现的为下图:

知乎里有User-agent与Disallow,Disallow 指定了不允许抓取的目录,而知乎里的意思就是禁止所有爬虫访问下面所列举的目录。

urllib的robotparser

我们可以利用robotparser模块来解析robots.txt,robotparser 模块提供了一个类,叫做 RobotFileParser。它可以根据某网站的 robots.txt 文件来判断一个爬取爬虫是否有权限来爬取这个网页。

urllib.robotparseR.RobotFileParser(url='')
#只需要在构造方法中传入robots.txt的链接就可以了
#也可以是默认为空,然后使用set_url()方法进行设置。

关于Requests

我们在利用urllib处理网页验证、处理cookies都是需要Opener、Handler来进行处理,但是requests库有着更为强大的用法。
urllib库的urlopen实际上也使以get的方式请求了一个网页,而在requests中我们使用的直接就为get()方法。而其他类型类似post或者请求head都是可以直接用requests.post或者requests.head方法。

GET请求

r = requests.get(url,params=data,headers=headers)
这样请求的网址实际上为url+data,此外网页的返回类型如果是json格式,虽然返回的实际上是str类型,但是是按照json的格式进行的,所以如果我们想直接把返回结果解析得到一个字典格式的话,可以直接调用json()方法。通过这种方法,可以将返回结果是json格式的字符串转化成python中的字典形式。

文件上传与下载

利用requests可以模拟提交一些数据:

import requests
files={'file':open('favicon.ico','rb')}
#文件必须和当前脚本在同一目录下
r=requests.post(url,files=files)
print(r.text)

同样,可以利用requests下载文件:

import requests
r = requests.get("https://github.com/favicon.ico")
with open('favicon.ico', 'wb') as f:f.write(r.content)

Cookies

比urillb会简单的许多,只需访问rrequests的cookies类型即可访问RequestsCookieJar:

import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():print(key + '=' + value)

我们可以始终保持登录的状态,将网页的cookies保存下来,再写入headers进行发送:

import requestsheaders = {'Cookie': 'q_c1=31653b264a074fc9a57816d1ea93ed8b|1474273938000|1474273938000; d_c0="AGDAs254kAqPTr6NW1U3XTLFzKhMPQ6H_nc=|1474273938"; __utmv=51854390.100-1|2=registration_date=20130902=1^3=entry_date=20130902=1;a_t="2.0AACAfbwdAAAXAAAAso0QWAAAgH28HQAAAGDAs254kAoXAAAAYQJVTQ4FCVgA360us8BAklzLYNEHUd6kmHtRQX5a6hiZxKCynnycerLQ3gIkoJLOCQ==";z_c0=Mi4wQUFDQWZid2RBQUFBWU1DemJuaVFDaGNBQUFCaEFsVk5EZ1VKV0FEZnJTNnp3RUNTWE10ZzBRZFIzcVNZZTFGQmZn|1474887858|64b4d4234a21de774c42c837fe0b672fdb5763b0','Host': 'www.zhihu.com','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
}
r = requests.get('https://www.zhihu.com', headers=headers)
print(r.text)

会话维持

之前自己在做学校的信息门户信息爬取,但是每一次运行程序都抓不到数据,将错误信息答应出来发现是监测到有重复登录的现象。明明是代码登陆成功后然后继续get()去请求的,怎么会出错呢?
实际上,在requests用了几次get()或者其他方法,都相当于打开了一次新的浏览器,他们之间是完全不相关的,所以并不存在第一个post()成功进行了模拟登录,第二个get()是在成功模拟登录的基础上继续进行操作,而是在打开一个浏览器进行新的操作,所以会出错。
解决方法是,在两次请求的时候都设置好一样的cookies,这样固然可行,但是非常繁琐,破坏了代码的简洁性。所以这里我们需要维持同一个会话窗口,使用session对象。

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

返回结果为:

{"cookies": {"number": "123456789"}
}

成功显示了我们想要提交的cokies内容:number:123456789.

转载于:https://www.cnblogs.com/yunlambert/p/8733508.html

Python网络爬虫(四)相关推荐

  1. Python网络爬虫(四):selenium+chrome爬取美女图片

    说明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因为是模拟浏览器访问,chrome需要再下载一个驱动,具体方式在我的上 ...

  2. (四)python网络爬虫(理论+实战)——发送请求

    系列文章:​python网络爬虫专栏​ 目录 序言 本节学习目标 3 动手写网络爬虫

  3. python网络爬虫教程(四):强大便捷的请求库requests详解与编程实战

    上一章中,我们了解了urllib的基本用法,详情可浏览如下链接python网络爬虫教程(三):详解urllib库,但其中确实有不方便的地方,为此,我们可以使用更方便更简洁的HTTP请求库request ...

  4. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...

    廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...

  5. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  6. 精通python网络爬虫-精通Python网络爬虫 PDF 高清版

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫.核心技术.框架.项目实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小108.6 MB,韦玮编写 ...

  7. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf

    python网络爬虫从入门到实践pdf是一本非常热门的编程教学.这本书籍详细讲解了Python以及网络爬虫相关知识,非常适合新手阅读,需要的用户自行下载吧. Python网络爬虫从入门到实践电子书介绍 ...

  8. python网络爬虫教程-终于明了python网络爬虫从入门到实践

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python网络爬虫从入门到实践 环境配置:下载Pyth ...

  9. python与excel结合能做什么-Python网络爬虫与文本数据分析

    原标题:Python网络爬虫与文本数据分析 课程介绍 在过去的两年间,Python一路高歌猛进,成功窜上"最火编程语言"的宝座.惊奇的是使用Python最多的人群其实不是程序员,而 ...

  10. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

最新文章

  1. (二)Linux命令使用
  2. 会动的图解 (二) 怎么让goroutine跑一半就退出?
  3. ES6——Symbol
  4. 刘宏伟计算机组成,哈工大组成原理和数据结构 ppt 计算机组成原理刘宏伟 版本一 第18讲...
  5. java redis pubsub_如何从Java中的生菜RedisPubSubListener获取消息?
  6. linux系统中jdk的卸载及安装
  7. 诺基亚java闪退_回顾诺基亚N9:诺基亚手机颜值巅峰,却在发布7天后被“放弃”...
  8. 工具 | Procexp工具使用及案例说明
  9. n阶Hilbert矩阵的Gauss消去法求解
  10. 内存泄露分析工具linux,Linux下性能分析工具和内存泄露检测工具的简介(Valgrind和gprof)...
  11. 1.1UiPath下载安装与激活
  12. React报错 Too many re-renders
  13. pci总线定时协议_PCI总线标准及协议
  14. 重温设计模式二 设计原则之依赖倒置原则
  15. 学生宿舍管理mysql设计_学生宿舍管理系统设计与实现(SSH,MySQL)
  16. c语言课程设计--打飞碟源代码,飞碟游戏(飞碟游戏规则)
  17. 2018-2020-Android面试心得,题目精选已拿到offer-,现拿年薪40万
  18. kubeadm修改默认证书有效期,解决证书过期问题
  19. 基于希克斯需求价格弹性计算_西方经济学(微观部分)计算题
  20. arp 已知mac找ip_怎么通过mac地址查ip 通过mac地址查ip方法【图文】

热门文章

  1. vs 2005應用2003框架
  2. xsd文件转图片_原来华为手机能一键将图片转为PDF,实在太方便啦!你还不会吗?...
  3. go - 发布订阅模型
  4. Collectors.toSet()
  5. java模拟键盘操作,java自动化操作
  6. VI.Multidocument Transactions
  7. Java Script之创建对象
  8. 【渝粤教育】国家开放大学2018年春季 0281-21T色装概论 参考试题
  9. 【渝粤题库】陕西师范大学210009幼儿园健康教育作业(高起专)
  10. AtCoder Beginner Contest 137 解题报告(A ~ E)