Python urllib、urllib2、httplib抓取网页代码实例


Posted in Python onMay 09, 2015

使用urllib2,太强大了
试了下用代理登陆拉取cookie,跳转抓图片......
文档:http://docs.python.org/library/urllib2.html

直接上demo代码了
包括:直接拉取,使用Reuqest(post/get),使用代理,cookie,跳转处理

#!/usr/bin/python
# -*- coding:utf-8 -*-
# urllib2_test.py
# author: wklken
# 2012-03-17 wklken@yeah.net


import urllib,urllib2,cookielib,socket

url = "http://www.testurl....." #change yourself
#最简单方式
def use_urllib2():
 try:
  f = urllib2.urlopen(url, timeout=5).read()
 except urllib2.URLError, e:
  print e.reason
 print len(f)

#使用Request
def get_request():
 #可以设置超时
 socket.setdefaulttimeout(5)
 #可以加入参数 [无参数,使用get,以下这种方式,使用post]
 params = {"wd":"a","b":"2"}
 #可以加入请求头信息,以便识别
 i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",
       "Accept": "text/plain"}
 #use post,have some params post to server,if not support ,will throw exception
 #req = urllib2.Request(url, data=urllib.urlencode(params), headers=i_headers)
 req = urllib2.Request(url, headers=i_headers)

 #创建request后,还可以进行其他添加,若是key重复,后者生效
 #request.add_header('Accept','application/json')
 #可以指定提交方式
 #request.get_method = lambda: 'PUT'
 try:
  page = urllib2.urlopen(req)
  print len(page.read())
  #like get
  #url_params = urllib.urlencode({"a":"1", "b":"2"})
  #final_url = url + "?" + url_params
  #print final_url
  #data = urllib2.urlopen(final_url).read()
  #print "Method:get ", len(data)
 except urllib2.HTTPError, e:
  print "Error Code:", e.code
 except urllib2.URLError, e:
  print "Error Reason:", e.reason

def use_proxy():
 enable_proxy = False
 proxy_handler = urllib2.ProxyHandler({"http":"http://proxyurlXXXX.com:8080"})
 null_proxy_handler = urllib2.ProxyHandler({})
 if enable_proxy:
  opener = urllib2.build_opener(proxy_handler, urllib2.HTTPHandler)
 else:
  opener = urllib2.build_opener(null_proxy_handler, urllib2.HTTPHandler)
 #此句设置urllib2的全局opener
 urllib2.install_opener(opener)
 content = urllib2.urlopen(url).read()
 print "proxy len:",len(content)

class NoExceptionCookieProcesser(urllib2.HTTPCookieProcessor):
 def http_error_403(self, req, fp, code, msg, hdrs):
  return fp
 def http_error_400(self, req, fp, code, msg, hdrs):
  return fp
 def http_error_500(self, req, fp, code, msg, hdrs):
  return fp

def hand_cookie():
 cookie = cookielib.CookieJar()
 #cookie_handler = urllib2.HTTPCookieProcessor(cookie)
 #after add error exception handler
 cookie_handler = NoExceptionCookieProcesser(cookie)
 opener = urllib2.build_opener(cookie_handler, urllib2.HTTPHandler)
 url_login = "https://www.yourwebsite/?login"
 params = {"username":"user","password":"111111"}
 opener.open(url_login, urllib.urlencode(params))
 for item in cookie:
  print item.name,item.value
 #urllib2.install_opener(opener)
 #content = urllib2.urlopen(url).read()
 #print len(content)
#得到重定向 N 次以后最后页面URL
def get_request_direct():
 import httplib
 httplib.HTTPConnection.debuglevel = 1
 request = urllib2.Request("http://www.google.com")
 request.add_header("Accept", "text/html,*/*")
 request.add_header("Connection", "Keep-Alive")
 opener = urllib2.build_opener()
 f = opener.open(request)
 print f.url
 print f.headers.dict
 print len(f.read())

if __name__ == "__main__":
 use_urllib2()
 get_request()
 get_request_direct()
 use_proxy()
 hand_cookie()

Python 相关文章推荐
使用python统计文件行数示例分享
Feb 21 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
使用python绘制常用的图表
Aug 27 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
python format 格式化输出方法
Jul 16 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python绘制地图神器folium的新人入门指南
May 23 Python
asyncio异步编程之Task对象详解
Mar 13 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 #Python
Python MySQLdb Linux下安装笔记
May 09 #Python
python实现类的静态变量用法实例
May 08 #Python
python使用pil生成图片验证码的方法
May 08 #Python
python实现连接mongodb的方法
May 08 #Python
python写入xml文件的方法
May 08 #Python
python从sqlite读取并显示数据的方法
May 08 #Python
You might like
WebQQ最新登陆协议的用法
2014/12/22 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
javascript 写类方式之九
2009/07/05 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
Python OS模块常用函数说明
2015/05/23 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
PyQt5响应回车事件的方法
2019/06/25 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
AOP的定义以及作用
2013/09/08 面试题
金士达面试非笔试
2012/03/14 面试题
审核会计岗位职责
2013/11/08 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
学校个人对照检查材料
2014/08/26 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
python turtle绘图命令及案例
2021/11/23 Python