文档章节

Python爬虫之urllib2笔记

 梦回雪夜观花
发布于 2016/02/01 19:59
字数 768
阅读 169
收藏 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;翻看先前的代码思路,也发现有些地方比较模糊,所以写个补充篇。 首先,...

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

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

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

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

老男孩coder
2018/06/17
0
0
Python+url2爬虫技术

这回就编写一个小爬虫,知乎好像封闭查询了,那么我们换一个比较好爬取,而且不容易变动的网站,emmmm,起点网怎么样?爬取许多小说名字吧。 爬取分为,嗯,三个步骤大概,首先是用python的u...

材大难为用
01/11
0
0
总结八个好用的Python爬虫技巧

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。 爬虫在开发过程中也有很...

糖宝lsh
2018/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异。技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节。 作为技术...

问题终结者
36分钟前
2
0
Kubernetes Client-go Informer 源码分析

几乎所有的Controller manager 和CRD Controller 都会使用Client-go 的Informer 函数,这样通过Watch 或者Get List 可以获取对应的Object,下面我们从源码分析角度来看一下Client go Informe...

阿里云官方博客
今天
4
0
传统IDC部署网站(三)

11. 重置密码 密钥和密码都支持远程登陆, 二选一 两个都可以登陆, 密钥相对于密码来说,相对安全一点 本地登陆无法是用密钥 修改密码 root 用户 passwd root 修改普通用户 passwd usernam...

miko0089
今天
6
0
bash特性

1.支持别名 alias 2.命令替换 $(COMMANS) 或者 `COMMAND` 3. bash支持的引号: `` :命令替换 "":弱引用,可以实现变量替换 '':强引用,不实现变量替换 4.文件名通配 globbing:(man 7 glo...

忙碌的小蜜蜂
今天
3
0
以语音评测的PC端demo代码为例,讲解口语评测如何实现

本文由云+社区发表 作者:腾讯智慧教育 概述 腾讯云智聆口语评测(英文版)(Smart Oral Evaluation-English,SOE-E)是腾讯云推出的语音评测产品,是基于英语口语类教育培训场景和腾讯云的语...

腾讯云加社区
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部