文档章节

Python爬虫之urllib2笔记

 梦回雪夜观花
发布于 2016/02/01 19:59
字数 768
阅读 168
收藏 5

0、简单例子

利用Python的urllib2库,可以很方便的完成网页抓取功能,下列代码抓取百度主页并打印。

# -*- coding: utf-8 -*-
import urllib
import urllib2

response = urllib2.urlopen("http://www.baidu.com")
print response.read()

 代码分析

先来看看urllib2.urlopen()函数的原型。

   urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])

        Open the URL url, which can be either a string or a Request object.

        i)timeout参数用于设置超时时间(以秒为单位)

        ii)data参数用于即为待提交的参数,需要用urllib.urlencode()函数进行编码      

        iii)url参数即为请求的url字符串或者Request对象

1、提交数据

    A)POST请求

# -*- coding: utf-8 -*-
import urllib
import urllib2

url = 'http://httpbin.org/post'
post_data = {'key1':'value1', 'key2':'value2'}
formal_post_data = urllib.urlencode(post_data)

response = urllib2.urlopen("http://httpbin.org/post",formal_post_data)

print response.read()

 运行结果:

 

  B)GET请求(get图)

# -*- coding: utf-8 -*-
import urllib
import urllib2

get_data = {'key1':'value1', 'key2':'value2'}
formal_get_data = urllib.urlencode(get_data)

url = 'http://httpbin.org/get' + '?' + formal_get_data   
response = urllib2.urlopen(url)

print response.read()

运行结果:

2、Request对象

注意 urllib2.urlopen()函数的第一个参数也可以是Request对象,Request对象的引入将更加方便的封装数据

原型 urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

# -*- coding: utf-8 -*-
import urllib
import urllib2

url = 'http://httpbin.org/post'

post_data = {'key1':'value1', 'key2':'value2'}
formal_post_data = urllib.urlencode(post_data)

#set headers
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

request = urllib2.Request(url, formal_post_data, headers)

response = urllib2.urlopen(request)
     
#supposed it is encoded in utf-8
content = response.read().decode('utf-8')
print content

运行结果:

Request的有关函数

# -*- coding: utf-8 -*-
import urllib
import urllib2

url = 'http://httpbin.org/post'

post_data = {'key1':'value1', 'key2':'value2'}
formal_post_data = urllib.urlencode(post_data)

#set headers
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

request = urllib2.Request(url, formal_post_data, headers)

print u'返回请求的方法post/GET'
method = request.get_method()
print 'get_method===>' + method
print u'返回提交的数据'
data = request.get_data()
print 'request.get_data()===>',data

print u'返回参数中的url'
full_url = request.get_full_url()
print 'request.get_full_url()===>',full_url

print u'返回请求的schema'
request_type = request.get_type()
print 'request.get_type()===>',request_type

print u'返回请求的主机'
host = request.get_host()
print 'request.get_host()===>',host

print u'返回选择器 - URL 中发送到服务器中的部分'
selector = request.get_selector()
print 'request.get_selector()===>',selector


print u'返回选择器请求头部'
header_items = request.header_items()
print 'request.header_items()===>',header_items

##get_header(header_name, default=None) 获得指定的header
## Request.add_header(key, val)可添加头部
## Request.has_header(header) 检查是否实例拥有参数中的头
## Request.has_data() 检查是否含有POST数据

运行结果:

2、Response对象

 urllib2.urlopen()函数返回的response对象有以下方法 
        geturl() — 返回所获取资源的URL, 通常用于决定是否跟着一个重定向
        info() — 返回页面的元信息,例如头部信息,信息以 mimetools.表单的形式显现。
        getcode() — 返回响应的HTTP状态码.

# -*- coding: utf-8 -*-
import urllib
import urllib2

url = 'http://httpbin.org/post'

post_data = {'key1':'value1', 'key2':'value2'}
formal_post_data = urllib.urlencode(post_data)

#set headers
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

request = urllib2.Request(url, formal_post_data, headers)

response = urllib2.urlopen(request)

print u'获得真实url(重定向后的url)'
print response.geturl()
print u'获得返回状态码'
print response.code
print u'页面的元信息'
print response.info()

     运行结果:

3、常用代码

# -*- coding: utf-8 -*-
import urllib
import urllib2

url = 'http://httpbin.org/post'

post_data = {'key1':'value1', 'key2':'value2'}
formal_post_data = urllib.urlencode(post_data)

#set headers
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

request = urllib2.Request(url, formal_post_data, headers)

response = urllib2.urlopen(request)

#supposed it is encoded in utf-8
content = response.read().decode('utf-8')

print content





        







    




© 著作权归作者所有

共有 人打赏支持
粉丝 8
博文 13
码字总数 16693
作品 0
武汉
程序员
私信 提问
python爬虫笔记——beautifulsoup篇补充

今天工作原因需要用到爬虫,发现之前的代码有部分不可行了;因为先前用的是python2,但我在公司电脑上装的是python3;翻看先前的代码思路,也发现有些地方比较模糊,所以写个补充篇。 首先,...

徐胥
10/30
0
0
她们不一样!python小白刚学会python竟然爬取了网上所有小姐姐的照片

如今想学python的人越来越多,无论是专业的程序员还是业余爱好者,都对python情有独钟。世界上值得学习的技能有很多,但是如果你要问我推荐哪一个,那么我会推荐一门编程语言,比如python。如...

Python学习
06/06
0
0
Python开发简单爬虫--学习笔记

一、概述 目标 掌握开发轻量级爬虫 内容 爬虫简介 简单爬虫架构 URL管理器 网页下载器(urllib2) 网页解析器(BeautifulSoup) 完整实例:爬取百度百科雷军词条相关的1000个页面数据 tips: 轻量...

老男孩coder
06/17
0
0
Python: difference between urllib and urllib2

作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版。今天看到老外写的一篇《Python: difference between urllib and urllib2》才明白其中的区别。 You might be intrigu...

DragonRiver2015
2013/12/08
0
0
urllib2 发送HTTP Request

Python自动化测试 (九)urllib2 发送HTTP Request urllib2 是Python自带的标准模块, 用来发送HTTP Request的。 类似于 .NET中的, HttpWebRequest类 urllib2 的优点 Python urllib2 发出的...

yzy121403725
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

移动端Appium自动化测试框架的优势

众所周知,现在市面上的移动端操作系统已被Android和IOS占领,其中Android的份额更是在80%以上。那么面对市面上林林总总的自动化测试框架和工具,为什么说Appium在自动化测试框架的统治级优势...

程序猿拿Q
6分钟前
0
0
设计模式 之 观察者模式

设计模式 之 观察者模式 场景 场景比较简单,当一个对象的状态发生改变时,自动通知所有依赖(或观察)它的对象。 比如:发布/订阅 原理:发布者存储N个订阅者的对象信息,当发布者发布消息时...

GMarshal
10分钟前
0
0
linux 常用

netstat -tunlp |grep 8080 查看8080 占用 netstat -tunlp 用于查看所有的端口号的进程情况

west_coast
15分钟前
1
0
Bytom信息上链教程

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 很多了解比原链的都知道,比原链是专注信息和数字资产在链上交互和流转的...

比原链Bytom
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部