文档章节

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开发简单爬虫--学习笔记

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

老男孩coder
06/17
0
0
她们不一样!python小白刚学会python竟然爬取了网上所有小姐姐的照片

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

Python学习
06/06
0
0
带你入门Python爬虫,8个常用爬虫技巧盘点

python作为一门高级编程语言,它的定位是优雅、明确和简单。 我学用python差不多一年时间了, 用得最多的还是各类爬虫脚本, 写过抓代理本机验证的脚本、写过论坛中自动登录自动发贴的脚本 ...

糖宝lsh
08/08
0
0
使用Urllib2制作有道翻译器

今天是学习爬虫的第二天了,看了网上很多初学者都喜欢爬取字典翻译。确实,有一个自己随时随地使用的翻译神器,省去了打开浏览器输入网址的那些繁琐,也腾出了不少时间。在这里我选择的是有道...

代码打碟手
09/13
0
0
python3爬虫爬取网页图片简单示例

本人也是刚刚开始学习python的爬虫技术,然后本来想在网上找点教程来看看,谁知道一搜索,大部分的都是用python2来写的,新手嘛,一般都喜欢装新版本。于是我也就写一个python3简单的爬虫,爬...

IT民工_柒晓白
2017/10/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
12
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
4
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部