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写的Tkinter程序屏幕居中方法
Mar 10 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
python中while循环语句用法简单实例
May 07 Python
python调用fortran模块
Apr 08 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python 探针的实现原理
2016/04/23 Python
使用Python对Access读写操作
2017/03/30 Python
举例讲解Python常用模块
2019/03/08 Python
python常用运维脚本实例小结
2020/02/14 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
What is EJB
2016/07/22 面试题
会计应聘求职信范文
2013/12/17 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
保安队长职务说明书
2014/02/23 职场文书
同学聚会策划方案
2014/06/06 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
2016春季运动会前导词
2015/11/25 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
python脚本框架webpy模板赋值实现
2021/11/20 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL