1.urllib

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

- url: 需要打开的网址

- data:Post提交的数据

- timeout:设置网站的访问超时时间

直接用urllib.request模块的urlopen()获取页面,page的数据格式为bytes类型,需要decode()解码,转换成str类型。

1 from urllib import request

2

3 response = request.urlopen(r'http://python.org/') # HTTPResponse类型

4 page = response.read()

5 page = page.decode('utf-8')

urlopen返回对象提供方法:

- read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作

- info():返回HTTPMessage对象,表示远程服务器返回的头信息

- getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到

- geturl():返回请求的url

2.Request

urllib.request.Request(url, data=None, headers={}, method=None)

使用request()来包装请求,再通过urlopen()获取页面。

1 url = r'http://www.lagou.com/zhaopin/Python/?labelWords=label'

2 headers = {

3 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

4 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',

5 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',

6 'Connection': 'keep-alive'

7 }

8 req = request.Request(url, headers=headers)

9 page = request.urlopen(req).read()

10 page = page.decode('utf-8')

用来包装头部的数据:

- User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言

- Referer:可以用来防止盗链,有一些网站图片显示来源http://***.com,就是检查Referer来鉴定的

- Connection:表示连接状态,记录Session的状态。

3.Post数据

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

urlopen()的data参数默认为None,当data参数不为空的时候,urlopen()提交方式为Post。

1 from urllib import request, parse

2 url = r'http://www.lagou.com/jobs/positionAjax.json?'

3 headers = {

4 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

5 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',

6 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',

7 'Connection': 'keep-alive'

8 }

9 data = {

10 'first': 'true',

11 'pn': 1,

12 'kd': 'Python'

13 }

14 data = parse.urlencode(data).encode('utf-8')

15 req = request.Request(url, headers=headers, data=data)

16 page = request.urlopen(req).read()

17 page = page.decode('utf-8')

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)

urlencode()主要作用就是将url附上要提交的数据。

1 data = {

2 'first': 'true',

3 'pn': 1,

4 'kd': 'Python'

5 }

6 data = parse.urlencode(data).encode('utf-8')

经过urlencode()转换后的data数据为?first=true?pn=1?kd=Python,最后提交的url为

http://www.lagou.com/jobs/positionAjax.json?first=true?pn=1?kd=Python

Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码

1 page = request.urlopen(req, data=data).read()

当然,也可以把data的数据封装在urlopen()参数中

1 def get_page(url):

2 headers = {

3 'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

4 r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',

5 'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',

6 'Connection': 'keep-alive'

7 }

8 data = {

9 'first': 'true',

10 'pn': 1,

11 'kd': 'Python'

12 }

13 data = parse.urlencode(data).encode('utf-8')

14 req = request.Request(url, headers=headers)

15 try:

16 page = request.urlopen(req, data=data).read()

17 page = page.decode('utf-8')

18 except error.HTTPError as e:

19 print(e.code())

20 print(e.read().decode('utf-8'))

21 return page

5、使用代理

urllib.request.ProxyHandler(proxies=None)

当需要抓取的网站设置了访问限制,这时就需要用到代理来抓取数据。

1 data = {

2 'first': 'true',

3 'pn': 1,

4 'kd': 'Python'

5 }

6 proxy = request.ProxyHandler({'http': '5.22.195.215:80'}) # 设置proxy

7 opener = request.build_opener(proxy) # 挂载opener

8 request.install_opener(opener) # 安装opener

9 data = parse.urlencode(data).encode('utf-8')

10 page = opener.open(url, data).read()

11 page = page.decode('utf-8')

12 return page

归类 : python爬虫

pythonurllib模块-Python3学习笔记(urllib模块的使用)相关推荐

  1. pythonurllib标准_Python标准库学习笔记 urllib模块

    利用缓存实现简单的获取 import urllib import os def reporthook(blocks_read,block_size,total_size): if not blocks ...

  2. Python学习笔记13_模块

    Python学习笔记13_模块 文章目录 Python学习笔记13_模块 1.导入模块和的方法及使用 2.分层的文件系统中常用的包结构 3.OS 模块 4.sys 模块 5.math 模块 6.ran ...

  3. Python学习笔记:第三方模块2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. python中socket模块常用吗_python网络学习笔记——socket模块使用记录

    此文章记录了笔者学习python网络中socket模块的笔记. 建议初次学习socket的读者先读一遍socket模块主要函数的介绍. socket模块的介绍可以参考笔者的前一篇关于socket官方文 ...

  5. Verilog学习笔记-——Verilog模块例化

    Verilog学习笔记---Verilog模块例化 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化.模块例化建立了描述的层次.信号端口可以通过位置或名称关联,端口连接也必须遵循一些规则 ...

  6. 【小猫爪】AUTOSAR学习笔记15-BswM模块

    [小猫爪]AUTOSAR学习笔记15-BswM模块 前言 1 BswM模块简介 2 BswM功能简介 2.1 模式仲裁 2.2 模式控制 END 前言   上一节介绍了一个非常夸张的EcuM模块,其中 ...

  7. 【小猫爪】AUTOSAR学习笔记14-EcuM模块

    [小猫爪]AUTOSAR学习笔记14-EcuM模块 前言 1 EcuM模块简介 2 EcuM功能简介 2.1 EcuM的状态机 2.2 RUN和POST_RUN 2.3 Startup阶段 1. St ...

  8. A Byte of Python3 学习笔记

    A Byte of Python3 学习笔记 第七章 控制流 1.if语句(带输入函数) 2.while语句 3.for循环 4.break.continue.return的区别 第八章 函数 8.1 ...

  9. Python3 学习笔记

    Python3 学习笔记 1.基础语法 1.1 字符串操作 title() 将单词首字母改为大写 upper() 所有字母改为大写 lower() 所有字母改为小写 str1+str2 字符串通过'+ ...

最新文章

  1. poj2155(二维树状数组)
  2. 斯坦福团队开发智能盲杖,搭载激光雷达,可探测障碍规划路线,完全开源可在家DIY...
  3. mysql 安装以及配置
  4. JAVA-初步认识-第五章-数组-常见操作-最值
  5. Google虚拟现实游戏 Ingress 邀请码一枚(已领)
  6. 第一章 PX4-Pixhawk-程序编译过程解析
  7. 多线程:CopyOnWriteArrayList
  8. 两个网口芯片接一个变压器_一看就会:详细讲解网络变压器作用
  9. Kettle资源库-元数据
  10. ASP.Net本地化/国际化解决方案原理和代码示例
  11. CLion安装 + MinGW 配置 + Opencv安装
  12. 一个老程序员的阶段性总结
  13. 2021年江苏省教学成果奖(高等教育类)拟获奖项目名单
  14. 软件测试带宽低,性能测试分析之带宽瓶颈的疑惑
  15. P61-前端基础HTML-表单入门介绍
  16. 上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二)
  17. 在制品与前置时间(又叫交付时间)
  18. 求一个数各个位数之和
  19. Android supports-screens 屏幕适配
  20. 小程序微信支付提示:商户订单号重复

热门文章

  1. ISA SERVER使用指南
  2. 第三章 python webdriver API(一)——浏览器操作
  3. 【安富莱原创开源应用第3期】花式玩转网络摄像头之VNC远程桌面版本,稳定运行2年不死机...
  4. 位运算一些简单的应用
  5. Android菜鸟成长记4-button点击事件
  6. Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au...
  7. Linux 火狐浏览器安装Flash插入
  8. 用JAVA操作ClearCase
  9. python详细安装教程 path-Python解释器安装教程以及环境变量配置
  10. python使用方法-六、python 方法的使用