urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块:

urllib.request   请求模块

urllib.error   异常处理模块

urllib.parse   url解析模块

urllib.robotparse    robots.txt解析模块

下面是一些urllib库的使用方法。

使用urllib.request

  1. import urllib.request
  2.  
  3. response = urllib.request.urlopen('http://www.bnaidu.com')
    print(response.read().decode('utf-8'))

使用read()方法打印网页的HTML,read出来的是字节流,需要decode一下

  1. import urllib.request
  2.  
  3. response = urllib.request.urlopen('http://www.baidu.com')
  4. print(response.status) #打印状态码信息 其方法和response.getcode() 一样 都是打印当前response的状态码
  5. print(response.getheaders()) #打印出响应的头部信息,内容有服务器类型,时间、文本内容、连接状态等等
  6. print(response.getheader('Server')) #这种拿到响应头的方式需要加上参数,指定你想要获取的头部中那一条数据
  7. print(response.geturl()) #获取响应的url
  8. print(response.read())#使用read()方法得到响应体内容,这时是一个字节流bytes,看到明文还需要decodecharset格式

为一个请求添加请求头,伪装为浏览器

1.在请求时就加上请求头参数

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. url = 'http://httpbin.org/post'
  5. header = {}
  6. header['User-Agent'] = 'Mozilla/5.0 ' \
  7. '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \
  8. '(KHTML, like Gecko) Version/5.1 Safari/534.50'
  9.  
  10. req = urllib.request.Request(url=url, headers=header)
    res = urllib.request.urlopen(req)

Request是一个请求类,在构造时将headers以参数形式加入到请求中

2.使用动态追加headers的方法

若要使用动态追加的方法,必须实例化Request这个类

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. url = 'http://httpbin.org/post'
  5.  
  6. req = urllib.request.Request(url=url)
  7. req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0')
    res = urllib.request.urlopen(req)

使用代理:

ProxyHandler是urllib.request下的一个类,借助这个类可以构造代理请求

参数为一个dict形式的,key对应着类型,IP,端口

  1. import urllib.request
  2.  
  3. proxy_handler = urllib.request.ProxyHandler({
  4. 'http':'112.35.29.53:8088',
  5. 'https':'165.227.169.12:80'
  6. })
  7. opener = urllib.request.build_opener(proxy_handler)
  8. response = opener.open('http://www.baidu.com')
    print(response.read())

urllib.parse的用法

  1. import urllib.request
  2. import urllib.parse
  3.  
  4. url = 'http://httpbin.org/post'
  5. header = {}
  6. header['User-Agent'] = 'Mozilla/5.0 ' \
  7. '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \
  8. '(KHTML, like Gecko) Version/5.1 Safari/534.50'
  9.  
  10. data = {}
  11. data['name'] = 'us'
  12. data = urllib.parse.urlencode(data).encode('utf-8')
  13. req = urllib.request.Request(url=url, data=data, headers=header, method='POST')
  14. response = urllib.request.urlopen(req)
  15. print(response.read().decode('utf-8'))
  16. print(type(data))

urllib这个库很坑,建议直接弃用,上个月我用urllib写好的代码,现在运行起来各种问题

所以使用requests库吧,超简洁的语法方法。

python爬虫---urllib库的基本用法的更多相关文章

  1. Python爬虫Urllib库的高级用法

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

  2. Python爬虫 Urllib库的高级用法

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

  3. Python爬虫Urllib库的基本使用

    Python爬虫Urllib库的基本使用 深入理解urllib.urllib2及requests  请访问: http://www.mamicode.com/info-detail-1224080.h ...

  4. python爬虫 - Urllib库及cookie的使用

    http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...

  5. 对于python爬虫urllib库的一些理解(抽空更新)

    urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urllib库中,所有和网 ...

  6. python爬虫 urllib库基本使用

    以下内容均为python3.6.*代码 学习爬虫,首先有学会使用urllib库,这个库可以方便的使我们解析网页的内容,本篇讲一下它的基本用法 解析网页 #导入urllib from urllib im ...

  7. Python爬虫--Urllib库

    Urllib库 Urllib是python内置的HTTP请求库,包括以下模块:urllib.request (请求模块).urllib.error( 异常处理模块).urllib.parse (url ...

  8. Python爬虫urllib库的使用

    urllib 在Python2中,有urllib和urllib2两个库实现请求发送,在Python3中,统一为urllib,是Python内置的HTTP请求库 request:最基本的HTTP请求模块 ...

  9. python爬虫urllib库使用

    urllib包括以下四个模块: 1.request:基本的HTTP请求模块,可以用来模拟发送请求.就像在浏览器里输入网址然后回车一样,只需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程. ...

随机推荐

  1. NodeJS 获取网页源代码

    获取网页源代码 node 获取网页源代码 var http = require('http'); var url = "http://www.baidu.com/"; // 参数u ...

  2. vscode已有64位版本。

    我的操作系统是win10 Family版本. vscode不知道什么鬼,只要开启没动任何操作,cpu就占到30%. 于是我打开任务管理器,选中vscode进程->转到详细信息->结束cpu ...

  3. Json序列化提示缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”

    //缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor” namespace System.Runtime.Compi ...

  4. 【Mac】Finder显示或隐藏文件

    第一步:打开「终端」应用程序. 第二步:输入如下命令: defaults write com.apple.finder AppleShowAllFiles -boolean true ; killal ...

  5. intellij idea 破解教程

    首先呼吁:抵制盗版,抵制盗版,抵制盗版 如果只是个人开发学习用,那么下面的教程可能比较适合你了 有两种方法,第一种:Activate--License server,在License server a ...

  6. Oracle(转换函数)

    在数据库中主要使用数据类型:字符,数字,日期(时间戳),所以这三种数据类型之间需要实现转换操作. 常用转换函数: 3.1.TO_CHAR()函数 将数据类型变为字符串. 日期格式化标记: 在TO_CH ...

  7. scala函数式编程(一)

    scala函数编程特点: 1.Scala函数使用命名参数: 即函数参数传递的实参与函数名相对应,与函数位置不对应. object Test { def main(args: Array[String] ...

  8. LaTeX 交叉引用系统简介

    目录 摘要 1. 简介 2. 指定标签或标记符 3. 标签的位置 4. 引用的生成和更新 5. 引用相关的警告信息 6. 扩展引用功能的宏包 6.1 varioref宏包 6.2 cleveref宏包 ...

  9. 力扣(LeetCode) 104. 二叉树的最大深度

    给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15,7], ...

  10. 获取 ip ( 第三方接口 )

    搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8 ...