网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx

上传人:b****3 文档编号:6891187 上传时间:2023-05-07 格式:DOCX 页数:30 大小:178.18KB
下载 相关 举报
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第1页
第1页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第2页
第2页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第3页
第3页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第4页
第4页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第5页
第5页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第6页
第6页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第7页
第7页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第8页
第8页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第9页
第9页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第10页
第10页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第11页
第11页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第12页
第12页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第13页
第13页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第14页
第14页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第15页
第15页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第16页
第16页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第17页
第17页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第18页
第18页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第19页
第19页 / 共30页
网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx

《网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx(30页珍藏版)》请在冰点文库上搜索。

网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx

protocol:

//hostname[:

port]/path/[;

parameters][?

query]#fragment

URL的格式由三部分组成:

①第一部分是协议(或称为服务方式)。

②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

③第三部分是主机资源的具体地址,如目录和文件名等。

第一部分和第二部分用“:

//”符号隔开,

第二部分和第三部分用“/”符号隔开。

第一部分和第二部分是不可缺少的,第三部分有时可以省略。

五、URL和URI简单比较

URI属于URL更低层次的抽象,一种字符串文本标准。

换句话说,URI属于父类,而URL属于URI的子类。

URI的定义是:

统一资源标识符;

URL的定义是:

统一资源定位符。

二者的区别在于,URI表示请求服务器的路径,定义这么一个资源。

而URL同时说明要如何访问这个资源(http:

//)。

下面来看看两个URL的小例子。

1.HTTP协议的URL示例:

使用超级文本传输协议HTTP,提供超级文本信息服务的资源。

例:

其计算机域名为。

超级文本文件(文件类型为.html)是在目录/channel下的welcome.htm。

这是中国人民日报的一台计算机。

超级文本文件(文件类型为.html)是在目录/talk下的talk1.htm。

这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。

2.文件的URL

用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。

有时可以省略目录和文件名,但“/”符号不能省略。

file:

//

上面这个URL代表存放在主机上的pub/files/目录下的一个文件,文件名是foobar.txt。

代表主机上的目录/pub。

代表主机的根目录。

爬虫最主要的处理对象就是URL,它根据URL地址取得所需要的文件内容,然后对它进行进一步的处理。

因此,准确地理解URL对理解网络爬虫至关重要。

[Python]网络爬虫

(二):

利用urllib2通过指定的URL抓取网页内容

版本号:

Python2.7.5,Python3改动较大,各位另寻教程。

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。

类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端,然后读取服务器端的响应资源。

在Python中,我们使用urllib2这个组件来抓取网页。

urllib2是Python的一个获取URLs(UniformResourceLocators)的组件。

它以urlopen函数的形式提供了一个非常简单的接口。

最简单的urllib2的应用代码只需要四行。

我们新建一个文件urllib2_test01.py来感受一下urllib2的作用:

1importurllib2

2response=urllib2.urlopen('

3html=response.read()

4printhtml

复制代码

按下F5可以看到运行的结果:

我们可以打开XX主页,右击,选择查看源代码(火狐OR谷歌浏览器均可),会发现也是完全一样的内容。

也就是说,上面这四行代码将我们访问XX时浏览器收到的代码们全部打印了出来。

这就是一个最简单的urllib2的例子。

除了"

http:

"

,URL同样可以使用"

ftp:

,"

等等来替代。

HTTP是基于请求和应答机制的:

客户端提出请求,服务端提供应答。

urllib2用一个Request对象来映射你提出的HTTP请求。

在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,

通过调用urlopen并传入Request对象,将返回一个相关请求response对象,

这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

我们新建一个文件urllib2_test02.py来感受一下:

5importurllib2

6req=urllib2.Request('

'

7response=urllib2.urlopen(req)

8the_page=response.read()

9printthe_page

可以看到输出的内容和test01是一样的。

urllib2使用相同的接口处理所有的URL头。

例如你可以像下面那样创建一个ftp请求。

10req=urllib2.Request('

//

在HTTP请求时,允许你做额外的两件事。

1.发送data表单数据

这个内容相信做过Web端的都不会陌生,

有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本,或其他WEB应用程序挂接)。

在HTTP中,这个经常使用熟知的POST请求发送。

这个通常在你提交一个HTML表单时由你的浏览器来做。

并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。

一般的HTML表单,data需要编码成标准形式。

然后做为data参数传到Request对象。

编码工作使用urllib的函数而非urllib2。

我们新建一个文件urllib2_test03.py来感受一下:

11importurllib

12importurllib2

13

14url='

15

16values={'

name'

:

'

WHY'

17'

location'

SDU'

18'

language'

Python'

}

19

20data=urllib.urlencode(values)#编码工作

21req=urllib2.Request(url,data)#发送请求同时传data表单

22response=urllib2.urlopen(req)#接受反馈的信息

23the_page=response.read()#读取反馈的内容

如果没有传送data参数,urllib2使用GET方式的请求。

GET和POST请求的不同之处是POST请求通常有"

副作用"

它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。

Data同样可以通过在Get请求的URL本身上面编码来传送。

24importurllib2

25importurllib

26

27data={}

28

29data['

]='

30data['

31data['

32

33url_values=urllib.urlencode(data)

34printurl_values

35

36name=Somebody+Here&

language=Python&

location=Northampton

37url='

38full_url=url+'

?

+url_values

39

40data=urllib2.open(full_url)

这样就实现了Data数据的Get传送。

2.设置Headers到http请求

有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器。

默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.7),

这个身份可能会让站点迷惑,或者干脆不工作。

浏览器确认自己身份是通过User-Agent头,当你创建了一个请求对象,你可以给他一个包含头数据的字典。

下面的例子发送跟上面一样的内容,但把自身模拟成InternetExplorer。

(多谢大家的提醒,现在这个Demo已经不可用了,不过原理还是那样的)。

41importurllib

42importurllib2

43

44url='

45

46user_agent='

Mozilla/4.0(compatible;

MSIE5.5;

WindowsNT)'

47values={'

48'

49'

50

51headers={'

User-Agent'

user_agent}

52data=urllib.urlencode(values)

53req=urllib2.Request(url,data,headers)

54response=urllib2.urlopen(req)

55the_page=response.read()

[Python]网络爬虫(三):

异常的处理和HTTP状态码的分类

先来说一说HTTP的异常处理问题。

当urlopen不能够处理一个response时,产生urlError。

不过通常的PythonAPIs异常如ValueError,TypeError等也会同时产生。

HTTPError是urlError的子类,通常在特定HTTPURLs中产生。

1.URLError

通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。

这种情况下,异常同样会带有"

reason"

属性,它是一个tuple(可以理解为不可变的数组),

包含了一个错误号和一个错误信息。

我们建一个urllib2_test06.py来感受一下异常的处理:

2

3req=urllib2.Request('

4

5try:

urllib2.urlopen(req)

6

7excepturllib2.URLError,e:

8printe.reason

按下F5,可以看到打印出来的内容是:

[Errno11001]getaddrinfofailed

也就是说,错误号是11001,内容是getaddrinfofailed

2.HTTPError

服务器上每一个HTTP应答对象response包含一个数字"

状态码"

有时状态码指出服务器无法完成请求。

默认的处理器会为你处理一部分这种应答。

例如:

假如response是一个"

重定向"

,需要客户端从别的地址获取文档,urllib2将为你处理。

其他不能处理的,urlopen会产生一个HTTPError。

典型的错误包含"

404"

(页面无法找到),"

403"

(请求禁止),和"

401"

(带验证请求)。

HTTP状态码表示HTTP协议所返回的响应的状态。

比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。

如果请求的资源不存在,则通常返回404错误。

HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成:

------------------------------------------------------------------------------------------------

200:

请求成功处理方式:

获得响应的内容,进行处理

201:

请求完成,结果是创建了新资源。

新创建资源的URI可在响应的实体中得到处理方式:

爬虫中不会遇到

202:

请求被接受,但处理尚未完成处理方式:

阻塞等待

204:

服务器端已经实现了请求,但是没有返回新的信息。

如果客户是用户代理,则无须为此更新自身的文档视图。

处理方式:

丢弃

300:

该状态码不被HTTP/1.0的应用程序直接使用,只是作为3XX类型回应的默认解释。

存在多个可用的被请求资源。

若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃

301:

请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源处理方式:

重定向到分配的URL

302:

请求到的资源在一个不同的URL处临时保存处理方式:

重定向到临时的URL

304请求的资源未更新处理方式:

丢弃

400非法请求处理方式:

401未授权处理方式:

403禁止处理方式:

404没有找到处理方式:

5XX回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求处理方式:

HTTPError实例产生后会有一个整型'

code'

属性,是服务器发送的相关错误号。

ErrorCodes错误码

因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。

BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。

当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。

你可以使用HTTPError实例作为页面返回的应答对象response。

这表示和错误属性一样,它同样包含了read,geturl,和info方法。

我们建一个urllib2_test07.py来感受一下:

9importurllib2

11

12try:

13urllib2.urlopen(req)

14

15excepturllib2.URLError,e:

16

17printe.code

18#printe.read()

按下F5可以看见输出了404的错误码,也就说没有找到这个页面。

3.Wrapping

所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。

推荐使用第二种。

我们建一个urllib2_test08.py来示范一下第一种异常处理的方案:

19fromurllib2importRequest,urlopen,URLError,HTTPError

20

21req=Request('

22

23try:

24

25response=urlopen(req)

27exceptHTTPError,e:

29print'

Theservercouldn\'

tfulfilltherequest.'

30

31print'

Errorcode:

e.code

33exceptURLError,e:

34

35print'

Wefailedtoreachaserver.'

36

37print'

Reason:

e.reason

38

39else:

40print'

Noexceptionwasraised.'

41#everythingisfine

和其他语言相似,try之后捕获异常并且将其内容打印出来。

这里要注意的一点,exceptHTTPError必须在第一个,否则exceptURLError将同样接受到HTTPError。

因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError)。

我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:

42fromurllib2importRequest,urlopen,URLError,HTTPError

44req=Request('

45

46try:

47

48response=urlopen(req)

49

50exceptURLError,e:

51

52ifhasattr(e,'

):

53

54print'

55

56print'

e.code

57

58elifhasattr(e,'

reason'

59

60print'

61

62print'

e.reason

63

64

65else:

66print'

67#everythingisfine

[Python]网络爬虫(四):

Opener与Handler的介绍和实例应用

在开始后面的内容之前,先来解释一下urllib2中的两个个方法:

infoandgeturl

urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl()

1.geturl():

这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。

获取的URL或许跟请求URL不同。

以人人中的一个超级链接为例,

我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接:

68fromurllib2importRequest,urlopen,URLError,HTTPError

69

70

71old_url='

72req=Request(old_url)

73response=urlopen(req)

74print'

Oldurl:

+old_url

75print'

Realurl:

+response.geturl()

运行之后可以看到真正的链接指向的网址:

2.info():

这个返回对象的字典对象,该字典描述了获取的页面情况。

通常是服务器发送的特定头headers。

目前是httplib.HTTPMessage实例。

经典的headers包含"

Content-length"

Content-type"

,和其他内容。

我们建一个urllib2_test11.py来测

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2