python3实现抓取网页资源的 N 种方法


Posted in Python onMay 02, 2017

这两天学习了python3实现抓取网页资源的方法,发现了很多种方法,所以,今天添加一点小笔记。

1、最简单

import urllib.request
response = urllib.request.urlopen('http://python.org/')
html = response.read()

2、使用 Request

import urllib.request
 
req = urllib.request.Request('http://python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()

3、发送数据

#! /usr/bin/env python3
 
import urllib.parse
import urllib.request
 
url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
     'act' : 'login',
     'login[email]' : 'yzhang@i9i8.com',
     'login[password]' : '123456'
     }
 
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data)
req.add_header('Referer', 'http://www.python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()
 
print(the_page.decode("utf8"))

4、发送数据和header

#! /usr/bin/env python3
 
import urllib.parse
import urllib.request
 
url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
     'act' : 'login',
     'login[email]' : 'yzhang@i9i8.com',
     'login[password]' : '123456'
     }
headers = { 'User-Agent' : user_agent }
 
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
the_page = response.read()
 
print(the_page.decode("utf8"))

5、http 错误

#! /usr/bin/env python3
 
import urllib.request
 
req = urllib.request.Request('http://www.python.org/fish.html')
try:
  urllib.request.urlopen(req)
except urllib.error.HTTPError as e:
  print(e.code)
  print(e.read().decode("utf8"))

6、异常处理1

#! /usr/bin/env python3
 
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("http://twitter.com/")
try:
  response = urlopen(req)
except HTTPError as e:
  print('The server couldn\'t fulfill the request.')
  print('Error code: ', e.code)
except URLError as e:
  print('We failed to reach a server.')
  print('Reason: ', e.reason)
else:
  print("good!")
  print(response.read().decode("utf8"))

7、异常处理2

#! /usr/bin/env python3
 
from urllib.request import Request, urlopen
from urllib.error import URLError
req = Request("http://twitter.com/")
try:
  response = urlopen(req)
except URLError as e:
  if hasattr(e, 'reason'):
    print('We failed to reach a server.')
    print('Reason: ', e.reason)
  elif hasattr(e, 'code'):
    print('The server couldn\'t fulfill the request.')
    print('Error code: ', e.code)
else:
  print("good!")
  print(response.read().decode("utf8"))

8、HTTP 认证

#! /usr/bin/env python3
 
import urllib.request
 
# create a password manager
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
 
# Add the username and password.
# If we knew the realm, we could use it instead of None.
top_level_url = "https://cms.tetx.com/"
password_mgr.add_password(None, top_level_url, 'yzhang', 'cccddd')
 
handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
 
# create "opener" (OpenerDirector instance)
opener = urllib.request.build_opener(handler)
 
# use the opener to fetch a URL
a_url = "https://cms.tetx.com/"
x = opener.open(a_url)
print(x.read())
 
# Install the opener.
# Now all calls to urllib.request.urlopen use our opener.
urllib.request.install_opener(opener)
 
a = urllib.request.urlopen(a_url).read().decode('utf8')
print(a)

9、使用代理

#! /usr/bin/env python3
 
import urllib.request
 
proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

 
a = urllib.request.urlopen("http://g.cn").read().decode("utf8")
print(a)

10、超时

#! /usr/bin/env python3
 
import socket
import urllib.request
 
# timeout in seconds
timeout = 2
socket.setdefaulttimeout(timeout)
 
# this call to urllib.request.urlopen now uses the default timeout
# we have set in the socket module
req = urllib.request.Request('http://twitter.com/')
a = urllib.request.urlopen(req).read()
print(a)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python中类型关系和继承关系实例详解
May 25 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python实现登录密码重置简易操作代码
Aug 14 Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
python中的plt.cm.Paired用法说明
May 31 Python
Pycharm学习教程(2) 代码风格
May 02 #Python
Pycharm学习教程(1) 定制外观
May 02 #Python
pycharm安装图文教程
May 02 #Python
python安装教程 Pycharm安装详细教程
May 02 #Python
python处理xml文件的方法小结
May 02 #Python
python实现的AES双向对称加密解密与用法分析
May 02 #Python
python中安装模块包版本冲突问题的解决
May 02 #Python
You might like
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
Python类的动态绑定实现原理
2020/03/21 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
Python中生成ndarray实例讲解
2021/02/22 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
通信工程毕业生自荐信
2013/11/01 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技