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字符遍历的艺术
Sep 06 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
利用python批量检查网站的可用性
Sep 09 Python
python基础教程之五种数据类型详解
Jan 12 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
python实现根据文件格式分类
Oct 31 Python
python logging添加filter教程
Dec 24 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
python面向对象版学生信息管理系统
Jun 24 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 随机数的深入理解
2013/06/05 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
用js重建星际争霸
2006/12/22 Javascript
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
python散点图实例之随机漫步
2018/08/27 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
用python批量下载apk
2020/12/29 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
几个Shell Script面试题
2012/08/31 面试题
材料加工硕士生求职信
2013/10/10 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
小学新学期教师寄语
2014/01/18 职场文书
教师读书活动总结
2014/05/07 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android