最近在研究爬虫, 主要是用urllib和urllib2以及其他的一些标准库.

当然, urllib2的缺点就是不能看到 http请求发送了那些header, 服务器返回的信息也看不到, 只能看到html代码.

实际情况肯定是能够看到的, 只是调用起来比较麻烦.

比如, 你构造了 Request(url, data), 你想看看你的http请求都有哪些东西, 你就不是很方便了.

比如看到下面这个http的请求头, 确实很麻烦.

GET / HTTP/1.1
Accept-Language: zh-cn
Accept-Encoding: gzip,deflate
Connection: close
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Host: www.google.com

在网上找了很多地方, 我知道了, 这个http请求头, 可以使用httplib中的httpconection来监视.

其奥秘就在urllib2.build_opener() 和 urllib2.install_opener()这个函数.

什么是openner? 就是urllib2的urlopen()这个函数最终用来打开网页的一个opener, urllib2默认使用httplib.HTTPConnection 来打开网页. httplib.HTTPConnection 只负责打开网页, 其他的事情, 比如显示它到底发出了什么http请求头, 它就不管了. 那么, 如何让它管这个事情呢, 那就是从httplib.HTTPConnection继承一个类MyHTTPConnection, 在发出http请求的同时 print一下 http request header就可以了:

class MyHTTPConnection(httplib.HTTPConnection):def send(self, s):print('\n----> Http Request Sended ---->')print( s ) # 干点httplib.HTTPConnection不做的事情.httplib.HTTPConnection.send(self, s)

opener = urllib2.build_opener(MyHTTPHandler)

然后就可以使用这个openner打开网页了

req = urllib2.Request(url=url, data=data)
response = opener.open(req)
content = response.read()

你可以看到, 在执行的同时, 就print出来http请求头信息了.

其他的, 诸如显示服务器返回的response 信息(比如服务器信息, content_length等等), 还有cookie, 都可以通过重载继承urllib2.HTTPHandler, urllib2.HTTPErrorProcessor, urllib2.HTTPCookieProcessor 等等urllib2默认的opener来做一些自己想做的事情. 这个在调试抓取网页的时候特别的方便.

如果知道了这个原理, 我想, 我就明白了BAE, 百度云环境为啥说他们的urllib2获取网页的时候, 使用了百度自带的抓取服务了, 因为你在bae上用urllib2的时候, 跟在自己电脑上使用urllib2没啥区别.实际上bae肯定是改写了 urllib2.HTTPHandler.

最后总结: 其实爬虫的最关键技术就是了解http协议. 所以研究urllib2到最后, 我就开始研究http协议了.

后续 参考资料:

1: Python模块学习 ---- httplib HTTP协议客户端实现 http://blog.csdn.net/jgood/article/details/4317416  这里主要是介绍python的httplib,不要被作者的标题迷惑

2. HTTP协议详解  http://blog.csdn.net/gueter/article/details/1524447

后续:  用python写了一个简单的模拟浏览器抓取网页的库webclient

用python模拟一个文本浏览器来抓取网页相关推荐

  1. python通过代理访问网页_Python使用PyCurl通过SOCK5代理抓取网页 - Python - 服务器之家...

    Python使用PyCurl通过SOCK5代理抓取网页 发布时间:2013-10-09

  2. python中模拟浏览器抓取网页(-)

    对于平时我们抓取网页的内容时,比较倾向于直接利用urllib进行抓取(这里我就基于python的2.7版本进行解说,对于python3之后的版本,是将python中的urllib和urllib2和并成 ...

  3. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 **( 想要学习Python?Python ...

  4. python抓取网站重要url_[Python]网络爬虫(一):抓取网页的含义和URL基本构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一 ...

  5. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  6. 怎么用python抓取网页数据

    一个人能力太小,聚沙成塔,抱团取火,分享知识,帮助学习, 有愿意或者有问题一起钻研,新人也好,老手也好,希望在这个寒冬下,尽力生活, 欢迎 一起 qq群,306671879.学习前端 抓取网页需要导入 ...

  7. python批量下载网页文件夹_Python抓取网页批量下载文件方法初探(正则表达式+BeautifulSoup) (转)...

    最近两周都在学习Python抓取网页方法,任务是批量下载网站上的文件.对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下我在初学python过程中遇到的问题及解决方法 ...

  8. Python爬虫成长之路:抓取证券之星的股票数据(转)

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  9. python动态渲染抓取网页_爬取动态网页python+Web kit

    上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显 优: 可以模拟任何人的操作,输入账号密码,点击登录等等操作 劣: ...

最新文章

  1. 美团二面:Redis与MySQL双写一致性如何保证?
  2. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
  3. linux用户和群组的作用,linux中的用户、群组和权限
  4. C#学习笔记——软件注册与注册机
  5. Mac如何快速导出保存Pages文档里的图片
  6. 【论文笔记】Deep Neural Networks for Object Detection
  7. 给FCKeditor添加自定义按钮的方法
  8. 匹配区县代码_行政区划代码查询
  9. 宇信易诚网银客户端安全控件存在远程拒绝服务漏洞
  10. 毕业论文详细--校园网组建
  11. Nansen:你想知道的关于 NFT 的一切
  12. 关于pack_padded_sequence 和 pad_packed_sequence最清楚的解释
  13. 12.9寸iPad Pro 5曝光:屏幕焕然一新、处理器强悍
  14. 实时数仓 大数据 Hadoop flink kafka
  15. EasySearcher搜索不到EasyNVR硬件的IP地址,如何解决?
  16. 整理了21场kaggle比赛TOP方案
  17. 如何给博客园添加动漫人物?
  18. 分布式光伏补贴_最新2018年各省市分布式光伏补贴政策汇总
  19. java基础语法要学多久
  20. 实验一计算机基础和网络知识,有关于计算机基础心得体会

热门文章

  1. html中背景条纹效果,CSS制作Web页面条纹背景样式的技巧分享
  2. 华硕u4000u 重装window7 重装win7 重装window10 重装win10 重装系统 戴尔 联想 鸿基 重装系统远程协助
  3. Android设置WIFI静态IP
  4. 数据禾|甘肃省国家湿地公园功能区划数据
  5. rtl8168的黑苹果网卡通用驱动10.7,10.8,10.9一直支持。
  6. 大数据干货,1个案例讲清楚精准营销!
  7. 你离大厂前端工作,升职加薪有时就差一点算法,今天全部教给你!
  8. 微软与索尼赋能计划已启动,旨共同创造新技术生态系统
  9. 基于JAVA中小学教师培训管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  10. EXCEL数据分析——上海餐饮数据分析