Python中使用urllib2模块编写爬虫的简单上手示例


Posted in Python onJanuary 20, 2016

提起python做网络爬虫就不得不说到强大的组件urllib2。在python中正是使用urllib2这个组件来抓取网页的。urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。它以urlopen函数的形式提供了一个非常简单的接口。通过下面的代码简单感受一下urllib2的功能;

import urllib2 
response = urllib2.urlopen('http://www.baidu.com/') 
html = response.read() 
print html

运行结果如下;

Python中使用urllib2模块编写爬虫的简单上手示例

查看http://www.baidu.com/源代码发现跟以上运行结果完全一样。这里的URL除了http:还可以是ftp:或file:
urllib2用一个Request对象来映射提出的HTTP请求。你可以创建一个Request对象,通过调用urlopen并传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。修改代码如下;

import urllib2 
req = urllib2.Request('http://www.baidu.com') 
response = urllib2.urlopen(req) 
page = response.read() 
print page

发现运行结果跟修改前一样。同时在http请求前你还需要做以下事1、发送表单数据。2、设置headers信息。
1、发送表单数据;常见于模拟登录时,一般的在登录操作时需要发送数据到服务器。这里主要用到post方法,一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非urllib2。测试代码如下

import urllib 
import urllib2 
 
url = 'http://www.server.com/register.php' 
 
postData = {'useid' : 'user', 
   'pwd' : '***', 
   'language' : 'Python' } 
 
data = urllib.urlencode(postData) # 编码工作 
req = urllib2.Request(url, data) # 发送请求同时传data 
response = urllib2.urlopen(req) #接受反馈的信息 
page = response.read() #读取反馈的内容

同时urllib2还可以使用get方法传送数据。代码如下;

import urllib2 
import urllib 
 
data = {} 
 
data['useid'] = 'user' 
data['pwd'] = '***' 
data['language'] = 'Python' 
 
values = urllib.urlencode(data) 
print values 
 
name=Somebody+Here&language=Python&location=Northampton 
url = 'http://www.example.com/example.php' 
full_url = url + '?' + url_values 
 
data = urllib2.open(full_url)

2、设置headers信息;有些站点对访问来源做了限制,所以这里模拟User-Agent头,代码如下;

import urllib 
import urllib2 
 
url = 'http://www.server.com/register.php' 
 
user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0' 
values = {'useid' : 'user', 
   'pwd' : '***', 
   'language' : 'Python' } 
 
headers = { 'User-Agent' : user_agent } 
data = urllib.urlencode(values) 
req = urllib2.Request(url, data, headers) 
response = urllib2.urlopen(req) 
page = response.read()

urllib2就介绍到这里啦!

异常处理
通常URLError在没有网络连接时或者服务器地址不可达时产生,在这种情况下异常会带有resaon属性包含了错误号和错误信息。如下代码测试效果;

import urllib 
import urllib2 
 
url = 'http://www.server.com/register.php' 
 
user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0' 
values = {'useid' : 'user', 
   'pwd' : '***', 
   'language' : 'Python' } 
 
headers = { 'User-Agent' : user_agent } 
data = urllib.urlencode(values) 
req = urllib2.Request(url, data, headers) 
response = urllib2.urlopen(req) 
page = response.read()

Python中使用urllib2模块编写爬虫的简单上手示例

查阅相关资料后显示Errno 10061表示服务器端主动拒绝。
除此之外还有HTTPError,当客户端与服务器之间建立正常连接时,urllib2将开始处理相关数据。如果遇到不能处理的情况就会产生相应的HTTPError,如网站访问常见的错误码”404″(页面无法找到),”403″(请求禁止),和”401″(带验证请求)等……HTTP状态码表示HTTP协议的响应情况,常见的状态码见HTTP状态码详解。
HTTPError会带有一个'code'属性,是服务器发送的错误号。当一个HTTPError产生后服务器会返回一个相关的错误号和错误页面。如下代码验证;

import urllib2 
 
req = urllib2.Request('http://www.python.org/callmewhy') 
 
try: 
 urllib2.urlopen(req) 
 
except urllib2.URLError, e: 
 
 print e.code

Python中使用urllib2模块编写爬虫的简单上手示例

输出404代码,说明找不到页面。
捕捉异常并处理……实现代码如下;

#-*- coding:utf-8 -*-
from urllib2 import Request, urlopen, URLError, HTTPError
 
req = Request('http://www.python.org/callmewhy')
 
try: 
 
 response = urlopen(req) 
 
except URLError, e: 
 
 if hasattr(e, 'code'): 
 
  print '服务器不能正常响应这个请求!' 
 
  print 'Error code: ', e.code 
 
 elif hasattr(e, 'reason'): 
 
  print '无法与服务器建立连接' 
 
  print 'Reason: ', e.reason 
 
 
else: 
 
 print '没有出现异常'

Python中使用urllib2模块编写爬虫的简单上手示例

成功捕捉到异常!

Python 相关文章推荐
Python正则表达式的使用范例详解
Aug 08 Python
python中sleep函数用法实例分析
Apr 29 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
Python中的取模运算方法
Nov 10 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
Python模拟百度登录实例详解
Jan 20 #Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 #Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 #Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 #Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 #Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 #Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
Jan 20 #Python
You might like
Memcache 在PHP中的使用技巧
2010/02/08 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
用于table内容排序
2006/07/21 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
python中判断文件结束符的具体方法
2020/08/04 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
趣味比赛活动方案
2014/02/15 职场文书
请假条标准格式规范
2014/04/10 职场文书
个性婚礼策划方案
2014/05/17 职场文书
2014年团支书工作总结
2014/11/14 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Vue如何清空对象
2022/03/03 Vue.js