urllib 是python内置的基本库,提供了一系列用于操作URL的功能,我们可以通过它来做一个简单的爬虫。

0X01 基本使用

简单的爬取一个页面:

import urllib2
request = urllib2.Request("http://www.cnblogs.com")
response = urllib2.urlopen(request)
print response.read()

GET方式

import urllib
import urllib2
values ={"id":}
data=urllib.urlencode(values)
url="http://192.168.125.129/config/sql.php"
geturl=url+"?"+data
request =urllib2.Request(url)
response =urllib2.urlopen(request)
print response.read()

POST方式

import urllib
import urllib2
url="http://192.168.125.129/config/sql.php"
values ={"id":}
data=urllib.urlencode(values)
request = urllib2.Request(url,data)
response=urllib2.urlopen(request)
print response.read()

0X02 高级用法

1、设置Headers

  部分网站做了反爬虫策略,通过上面的程序,可能会获取不到内容,这时候我们可以模拟浏览器的工作,设置一些Headers 的属性。

import urllib
import urllib2
url="http://192.168.125.129/config/sql.php"
values ={"id":}
data=urllib.urlencode(values)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'}
request=urllib2.Request(url,data,headers)
response =urllib2.urlopen(request)
print response.read()

常见的headers属性

User-Agent : 浏览器类型,有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
application/json : 在 JSON RPC 调用时使用
application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务

另外,对付防盗链,可以在headers中加入referer。

2、设置Timeout 

urllib2.urlopen方法,如果第二个参数data为空那么要特别指定是timeout是多少,写明形参,如果data已经传入,则不必声明。

import urllib
import urllib2
url="http://192.168.125.129/config/sql.php"
response = urllib2.urlopen(url, timeout=) import urllib
import urllib2
url="http://192.168.125.129/config/sql.php"
values ={"id":}
data=urllib.urlencode(values)
response = urllib2.urlopen(url, data,)

3、异常处理

  当程序异常时,需要用try-except语句来包围并捕获相应的异常,否则程序将终止。

import urllib
import urllib2
url="http://192.168.125.129/config/sql22.php"
values ={"id":}
data=urllib.urlencode(values)
try:
request = urllib2.Request(url,data)
response=urllib2.urlopen(request)
print response.read()
except urllib2.HTTPError, e:
print e.code
print e.reason
except urllib2.URLError, e:
print e.reason else:
print "ok"

这边使用URLError、HTTPError捕获异常,HTTPError是URLError的子类。

4、模拟登陆

  利用cookie实现模拟登录,使用cookielib模块,代码示例:

import urllib
import urllib2
import cookielib filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
'username':'admin',
'password':'password'
})
#登录的URL
loginUrl = 'http://site/login.php'
#模拟登录,并把cookie保存到变量
result = opener.open(loginUrl,postdata)
#保存cookie到cookie.txt中
cookie.save(ignore_discard=True, ignore_expires=True)
#利用cookie请求访问另一个网址,此网址是后台网址
comurl = 'http://site/index.php'
#请求访问后台网址
result = opener.open(comurl)
print result.read()

5、证书不匹配

证书不匹配问题 SSLError(CertificateError("hostname 'xxx.com' doesn't match 'test.xxx.org'"

对于python自带的 urllib库  解决办法

import ssl
ssl.match_hostname = lambda cert, hostname: True

Python爬虫学习笔记-1.Urllib库的更多相关文章

  1. Python爬虫学习笔记-2.Requests库

    Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...

  2. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  3. 转 Python爬虫入门四之Urllib库的高级用法

    静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...

  4. 转 Python爬虫入门三之Urllib库的基本使用

    静觅 » Python爬虫入门三之Urllib库的基本使用 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器 ...

  5. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  6. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  7. python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化

    实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...

  8. Python爬虫学习笔记(三)

    Cookies: 以抓取https://www.yaozh.com/为例 Test1(不使用cookies): 代码: import urllib.request # 1.添加URL url = &q ...

  9. Python爬虫学习笔记(一)

    1.urllib2简介 urllib2的是爬取URL(统一资源定位器)的Python模块.它提供了一个非常简单的接口,使用urlopen函数.它能够使用多种不同的协议来爬取URL.它还提供了一个稍微复 ...

随机推荐

  1. JavaScript世界的一等公民—— 函数

    简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...

  2. JAVA并发:深入分析volatile

    Java volatile 汇编代码研究 JVM执行篇:使用HSDIS插件分析JVM代码执行细节 聊聊并发(一)——深入分析Volatile的实现原理 深入Java底层:内存屏障与JVM并发详解 深入 ...

  3. Python——dummy_thread( _dummy_thread in Python 3.+)

    dummy_thread 模块在Python 3中改称为 _dummy_thread 模块,Python 的 2to3 工具能够帮你自动的更改旧代码中的模块名称.不过更推荐使用高层次的 dummy_t ...

  4. RedHat 6.4 安装WAS 7.0 启动失败com.ibm.websphere.ssl.SSLException

    问题描述 RedHat 6.4 安装 WAS 7.0,安装完成之后启动WAS失败,异常信息如下: [5/7/15 9:59:55:185 CST] 00000000 WsServerImpl E WS ...

  5. Linux基础网络设置

    查看Linux网络参数 ifconfig—-查看网络接口 > [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C ...

  6. tf.variable_scope

    转载:https://blog.csdn.net/gaoyueace/article/details/79079068 例如: #在名字为ae的命名空间内创建变量 with tf.variable_s ...

  7. spring mvc实现接口参数统一更改

    适用于post  json方式提交 使用map接收的接口参数更改. 使用@Aspect实现:

  8. MacOS下MySQL配置

    先去官网下载一个 MySQL for mac http://www.cnblogs.com/xiaobo-Linux/ 命令行运行终端,运行下面两条命令: 1 2 alias mysql=/usr/l ...

  9. 安装Java Decompiler

    原文:https://blog.csdn.net/yh_zeng2/article/details/75948467 Java Decompiler是Java语言的反编译工具,具体介绍见博客Java ...

  10. VC设置cookies实现文件刷下载量

    VC设置cookies实现文件刷下载量 VC设置cookies实现文件刷下载量 分类: c/c++2013-10-11 17:22 250人阅读 评论(0) 收藏 举报   目录(?)[+]   同学 ...