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之用Python计算
Sep 12 Python
Python中的super()方法使用简介
Aug 14 Python
python监控键盘输入实例代码
Feb 09 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
python实现两个字典合并,两个list合并
Dec 02 Python
Python如何省略括号方法详解
Mar 21 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python高并发和多线程有什么关系
Nov 14 Python
python通配符之glob模块的使用详解
Apr 24 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
第四节--构造函数和析构函数
2006/11/16 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
Python subprocess库的使用详解
2018/10/26 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
Python Subprocess模块原理及实例
2019/08/26 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
如何给Python代码进行加密
2020/01/10 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
django使用graphql的实例
2020/09/02 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
英语专业自荐书
2014/06/13 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2016年十一促销广告语
2016/01/28 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL