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统计文件行数示例分享
Feb 21 Python
Python中decorator使用实例
Apr 14 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python函数中不定长参数的写法
Feb 13 Python
Python常用特殊方法实例总结
Mar 22 Python
使用python+whoosh实现全文检索
Dec 09 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Python 存取npy格式数据实例
Jul 01 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网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
学习php开源项目的源码指南
2014/12/21 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
Python表示矩阵的方法分析
2017/05/26 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
教师产假请假条范文
2014/04/10 职场文书
教室布置标语
2014/06/26 职场文书
商铺门前三包责任书
2014/07/25 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书