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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python操作mysql中文显示乱码的解决方法
Oct 11 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python实现简单登录验证
Apr 13 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python实现大转盘抽奖效果
Jan 22 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
python读写文件write和flush的实现方式
Feb 21 Python
Django更新models数据库结构步骤
Apr 01 Python
keras CNN卷积核可视化,热度图教程
Jun 22 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数据库类
2009/05/27 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php的4种常见运行方式
2015/03/20 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
jquery中常用的SET和GET
2009/01/13 Javascript
js实现表格字段排序
2014/02/19 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
原生js实现日历效果
2020/03/02 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
企业申诉管理制度
2014/01/30 职场文书
打架检讨书2000字
2014/02/22 职场文书
挂牌仪式主持词
2014/03/20 职场文书
参赛口号
2014/06/16 职场文书
工作证明格式及范本
2014/09/12 职场文书
优秀教师单行材料
2014/12/16 职场文书
销售合作意向书范本
2015/05/08 职场文书
会计实训总结范文
2015/08/03 职场文书
话题作文之成长
2019/12/09 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
python语言中pandas字符串分割str.split()函数
2022/08/05 Python