- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python爬虫之urllib,伪装,超时设置,异常处理的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Urllib 。
1. Urllib.request.urlopen().read().decode() 。
返回一个二进制的对象,对这个对象进行read()操作,可以得到一个包含网页的二进制字符串,然后用decode()解码成html源码 。
2. urlretrieve() 。
将一个网页爬取到本地 。
3. urlclearup() 。
清除 urlretrieve()所产生的缓存 。
4. info() 。
返回一个httpMessage对象,表示远程服务器的头信息 。
5. getcode() 。
获取当前网页的状态码 200代表成功,404网页未找到 。
6. geturl() 。
获取当前爬取页面的网址 。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
from
urllib
import
request
# urlretrieve() -- 将一个网页爬取到本地
request.urlretrieve(
"http://www.baidu.com"
,filename
=
"demo.html"
)
# urlclearup() -- 清除urlretrieve()所产生的缓存
request.urlcleanup()
# info() -- 返回一个httpMessage对象,表示远程服务器的头信息
data
=
request.urlopen(
"http://www.taobao.com"
)
print
(data.info())
# getcode() -- 获取当前网页的状态码data.geturl()
print
(data.getcode())
# 获取当前爬取页面的网址
print
(data.geturl())
|
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Server: Tengine
Date: Wed,
09
May
2018
09
:
55
:
16
GMT
Content
-
Type
: text
/
html; charset
=
utf
-
8
Transfer
-
Encoding: chunked
Connection: close
Vary: Accept
-
Encoding
X
-
Snapshot
-
Age:
1
Content
-
MD5: tkjcPUrHBAIt2N
/
YXcuwZg
=
=
Vary: Ali
-
Detector
-
Type
, X
-
CIP
-
PT
Cache
-
Control:
max
-
age
=
0
, s
-
maxage
=
89
ETag: W
/
"29b8-16340528168"
Via: cache22.l2cm9[
0
,
304
-
0
,H], cache17.l2cm9[
0
,
0
], cache1.cn372[
0
,
200
-
0
,H], cache2.cn372[
1
,
0
]
Age:
70
X
-
Cache: HIT TCP_MEM_HIT dirn:
-
2
:
-
2
mlen:
-
1
X
-
Swift
-
SaveTime: Wed,
09
May
2018
09
:
54
:
59
GMT
X
-
Swift
-
CacheTime:
36
Timing
-
Allow
-
Origin:
*
EagleId:
3c1cf2e515258597167937091e
Set
-
Cookie: thw
=
cn; Path
=
/
; Domain
=
.taobao.com; Expires
=
Thu,
09
-
May
-
19
09
:
55
:
16
GMT;
Strict
-
Transport
-
Security:
max
-
age
=
31536000
200
https:
/
/
www.taobao.com
/
|
超时设置(timeout) 。
由于在实际的爬取过程中,部分网站可能访问过慢,影响性能,这时我们可设置超时访问. 。
示例: 如果在指定时间内正常访问,即输出获取数据的长度,如果超出指定时间,则抛出异常. 。
1
2
3
4
5
6
|
for
i
in
range
(
0
,
10
):
try
:
data
=
urllib.request.urlopen(
"http://www.baidu.com"
,timeout
=
0.05
).read()
print
(
len
(data))
except
Exception as e:
print
(
"出现异常:"
+
str
(e))
|
运行结果:
1
2
3
4
5
6
7
8
9
10
|
114980
114888
114809
114839
114824
114611
出现异常:<urlopen error timed out>
出现异常:<urlopen error timed out>
出现异常:<urlopen error timed out>
115003
|
。
伪装 。
在爬取过程中,可能部分网站限制浏览器访问所以为了顺利达到我们的目的,我们对自己进行伪装. 。
这里我们介绍一下浏览器的伪装技术. 。
普通爬取:
1
2
|
from
urllib
import
request
file
=
request.urlopen(
"http://www.baidu.com"
).read().decode()
|
通过浏览器伪装爬取数据:
方式一:
1
2
3
4
5
6
7
|
from
urllib
import
request
url
=
"http://www.baidu.com"
headers
=
(
"User-Agent"
,
" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
)
#这里模拟浏览器
opener
=
request.build_opener()
opener.addheaders
=
[headers]
data
=
opener.
open
(url).read()
print
(data)
|
方式二:
1
2
3
4
5
6
7
8
|
from
urllib
import
request
url
=
"http://www.baidu.com"
headers
=
(
"User-Agent"
,
" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
)
#这里模拟浏览器
opener
=
request.build_opener()
opener.addheaders
=
[headers]
request.install_opener(opener)
data
=
request.urlopen(url).read().decode(
"utf-8"
)
print
(data)
|
方式三:
1
2
3
4
5
6
|
from
urllib
import
request
url
=
"http://www.baidu.com"
headers
=
{}
"User-Agent"
:
" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
}
#这里模拟浏览器,通过字典
req
=
request.Request(url
=
rul,headers
=
headers)
data
=
request.urlopen(req).read().decode(
"utf-8"
)
print
(data)
|
异常处理 。
爬虫在运行过程中,可能会出现各种各样的问题,如果没有异常处理的话,爬出异常会直接崩溃停止运行,下次再运行的时候,爬虫又要重头开始,所以我们要开发的是一个具有顽强生命力的爬虫,必须要进行异常的处理. 。
常见异常示例:
1
2
3
4
5
|
301
重定向
403
禁止访问
404
没有找到页面
500
服务器内部出现问题
200
成功
|
python中有两个异常处理的类:URLError与HttpError 。
1
2
3
4
5
6
7
8
9
10
11
|
HttpError 是 URLError子类
HttpError 有异常状态码和异常原因
URLError 只有异常原因,没有异常状态码
所以,在异常处理的时候,不能使用URLError来代替
如果想要代替,必须要进行判断,判断是否有状态码属性
会产生URLError的情况:
1.
连接不上服务器
2.
远程的url不存在
3.
本地网络
4.HttpError
(是子类,也会出发会产生URLError
|
格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from
urllib
import
error,request
try
:
# 可能会出现异常的代码
data
=
request.urlopen(
"http://www.aliyu.com"
).read()
print
(data)
except
error.URLError as e:
# 进行异常的处理
if
hasattr
(e,
"code"
):
# 判断是否有状态码
print
(e.code)
# 状态码
if
hasattr
(e,
"reason"
):
# 判断是否有异常原因
print
(e.reason)
# 异常原因
|
以上这篇python爬虫之urllib,伪装,超时设置,异常处理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/Key_book/article/details/80258022 。
最后此篇关于python爬虫之urllib,伪装,超时设置,异常处理的方法的文章就讲到这里了,如果你想了解更多关于python爬虫之urllib,伪装,超时设置,异常处理的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如有任何帮助,我将不胜感激。我使用 Python 3.4.1 并尝试导入 urllib.request 和 urllib.parse。没有成功。我总是收到: Traceback (most recen
我正在尝试一个教程代码,它从一个网站获取 html 代码并打印出来。我在 ubuntu 上使用 python 3.4.0。代码: import urllib.request page = urllib
根据这个answer几年前给出了一个相同的问题,Javascript 中的 encodeURIComponent(str) 应该等同于 Python 中的 urllib.quote(str, safe
1。弃用问题 在 Python 3.7 中,我使用 urllib.request.urlretrieve(..) 函数从 URL 下载了一个大文件。在文档 ( https://docs.python.
在 python 3 中,导入时出现此错误:没有名为“urllib.request.urlretrieve”的模块; “urllib.request”不是一个包 import urllib impor
import urllib print urllib.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune
我在 gooogle colab 中使用来自 parselmouth 的 praat,在导入 from parselmouth.praat import call 时出现此错误 /usr/local/
是否有与 Python 的 urllib.parse.quote() 等效的 JavaScript 函数?和 urllib.parse.unquote() ? 我遇到的最接近的是encodeURI()
这个问题在这里已经有了答案: Importing installed package from script with the same name raises "AttributeError: m
Python 的 urllib.quote 和 urllib.unquote 在 Python 2.6.5 中无法正确处理 Unicode。这就是发生的事情: In [5]: print urllib
这个问题在这里已经有了答案: How to route urllib requests through the TOR network? [duplicate] (3 个回答) 关闭6年前。 示例代码
我正在制作一些简单的 python 帖子脚本,但效果不佳。 有两部分必须登录。 第一次登录使用' http://mybuddy.buddybuddy.co.kr/userinfo/UserInfo.a
我有以下脚本: from currency_converter import CurrencyConverter test = CurrencyConverter('http://www.ecb.eu
我正在编写一个小工具来监控学校的开课情况。 我编写了一个 python 脚本,每隔几分钟就会从每个部门获取当前类(class)的可用性。 该脚本一直正常运行,直到大学网站开始返回以下内容: SIS S
为什么下面的结果会出错? import re from urllib import quote as q s = re.compile(r'[^a-zA-Z0-9.: ^*$@!+_?-]') s.s
我正在开发一个网络爬虫来自动下载巴西网站上的一些文档。并且它使用了一些未知的编码(head 标签中没有定义字符集)。 人们只需付出很少的努力就可以阅读这些文档。但真正的问题是,列出文档的页面使用的链接
我有一个程序,我需要打开许多网页并下载其中的信息。然而,这些信息位于页面中间,需要很长时间才能找到。有没有办法让 urllib 只检索 x 行?或者,如果没有别的事,之后就不加载信息? 我在 Mac
我有一个脚本,使用 Urllib 打开我安装了谷歌分析的网页。我的问题是,为什么如果我执行脚本,GA 上不会显示访问次数? 最佳答案 Google Analytics 脚本是 JavaScript 代
我正在尝试下载航类搜索结果,但我不断收到一个与通过右键单击并手动存储网站获得的文件不同的文件。我已经尝试过 urllib 、 urllib2 以及我在这里找到的每个命令都无济于事。 这是一个 MWE:
我最近用Python(Windows 64位v3.3.1)编写了一个程序,并试图将其移植到D。我遇到的问题是我使用了urllib Python 中的模块,特别是 urllib.request.Requ
我是一名优秀的程序员,十分优秀!