- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
wait() 和 wait(timeout) 之间有什么区别。无论如何 wait() 需要等待通知调用,但为什么我们有 wait(timeout)? 那么 sleep(timeout) 和 wait(
如何向以下脚本添加超时?我希望它将文本显示为“超时”。 var bustcachevar = 1 //bust potential caching of external pages after in
我正在使用 Firebase once() 方法来检索 React Native 移动应用中的值。问题是,如果手机离线,once() 永远不会返回。文档说 ref.off() 方法应该取消回调,但这似
我在一个表中有一个大型数据集(超过 200 万行,每行超过 100 列),存储在 cassandra 中,几个月前(也许是 2 个月?)我能够执行一个简单的命令来跟踪该表中的记录数量: SELECT
我使用 jquery 开发移动应用程序,下面是我的代码,当我向包含的页面添加 5 或 6 行时,一切正常。但如果我添加多行显示错误消息:Javascript 执行超时。 function succes
我正在使用一个 javascript 确认,它将在 15 分钟后重复调用。如果用户未选择确认框中的任何选项我会在等待 1 分钟后重定向他。如何实现这一目标?我的代码是这样的 var timeo
每次我在沙箱环境中运行这段代码时,我都会超时并最终崩溃。我已经通过多个 IDE 运行它,但仍然找不到任何语法错误。如果有人看到了我没有看到的东西,我将非常感谢您的意见。 //assign variab
更新联系人后我会显示一条消息,1500 毫秒后我会转到另一个页面。我是这样做的: onSubmit() { if (this.form.valid) {
从昨天开始,我拼命尝试使用最新版本的 PHPMailer 运行一个非常简单的电子邮件脚本。 最荒谬的是,同一个脚本在两台服务器上不起作用,但在另一台服务器上却起作用。 这是我的尝试(来自 PHPMai
我已阅读以下 2 篇文章并尝试实现相同的文章。 我的代码是这样的,超时发生在这里 HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
我正在尝试连接到 wsdl 服务, 但收到此错误: wsdl 错误:获取 http://api.didww.com/api/?wsdl - HTTP 错误: header 的套接字读取超时 本地没有问
我在使用 Ansible 的 CentOs7 实例上从 Artifactory 下载 jar 文件时遇到问题。这是我第一次在 Linux 实例上这样做。 我在每个 Windows 实例上都使用了 wi
在过去的两天里,我一直在寻找原因,我在互联网上和堆栈上尝试了很多解决方案。 我有一个带有 ubuntu 16.04 和 apache2 的专用 VM -> 服务器版本:Apache/2.4.18 (U
我正处于构建 PHP 应用程序的早期阶段,其中一部分涉及使用 file_get_contents()从远程服务器获取大文件并将它们传输给用户。例如,要获取的目标文件是 200 mB。 如果下载到服务器
我正在尝试连接到本地网络内的路由器。到目前为止,我已经使用了 TcpClient。 检查我的代码: public static void RouterConnect() {
我正在尝试构建一段代码来搜索使用 Mechanize 和 Ruby 超时的页面。我的测试台包括一个专门写入超时的页面,以及 3 个正常运行的页面。这是代码: urls = ['http://examp
我是 python 的新手,也是语义网查询领域的新手。我正在使用 SPARQLWrapper 库查询 dbpedia,我搜索了库文档但未能找到从 sparqlWrapper 触发到 dbpedia 的
我正在从 GenServer 中的句柄信息功能调用 elixir genserver 以添加电话号码获取表单客户端。但是一旦调用了handle_call,所有者进程就会崩溃[超时]。请帮忙。 全局创建
假设我的 WCF 服务中有以下执行链: ServiceMethod 调用并等待 Method1,然后调用并等待 Method2,后者调用并等待 Method3。最后 ServiceMethod 在返回
目前我正在开发一个从远程服务器发送和接收文件的应用程序。为了进行网络操作,我正在使用 QNetworkAccessManager。 要上传文件,我使用 QNetworkAccessManager::p
我是一名优秀的程序员,十分优秀!