ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:178.18KB ,
资源ID:6891187      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6891187.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络爬虫抓取网页的含义和URL基本构成Word文档下载推荐.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、protocol :/ hostname:port / path / ;parameters?query#fragmentURL的格式由三部分组成:第一部分是协议(或称为服务方式)。第二部分是存有该资源的主机IP地址(有时也包括端口号)。第三部分是主机资源的具体地址,如目录和文件名等。第一部分和第二部分用“:/”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。五、URL和URI简单比较URI属于URL更低层次的抽象,一种字符串文本标准。换句话说,URI属于父类,而URL属于URI的子类。URI的定义是:统一资源标识符;URL的定义是:统一资源

2、定位符。二者的区别在于,URI表示请求服务器的路径,定义这么一个资源。而URL同时说明要如何访问这个资源(http:/)。下面来看看两个URL的小例子。1.HTTP协议的URL示例:使用超级文本传输协议HTTP,提供超级文本信息服务的资源。例:其计算机域名为。超级文本文件(文件类型为.html)是在目录 /channel下的welcome.htm。这是中国人民日报的一台计算机。超级文本文件(文件类型为.html)是在目录/talk下的talk1.htm。这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。2文件的URL用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存

3、取路 径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。file:/ 上面这个URL代表存放在主机上的pub/files/目录下的一个文件,文件名是foobar.txt。代表主机上的目录/pub。代表主机的根目录。爬虫最主要的处理对象就是URL,它根据URL地址取得所需要的文件内容,然后对它 进行进一步的处理。因此,准确地理解URL对理解网络爬虫至关重要。Python网络爬虫(二):利用urllib2通过指定的URL抓取网页内容版本号:Python2.7.5,Python3改动较大,各位另寻教程。所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到

4、本地。类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。在Python中,我们使用urllib2这个组件来抓取网页。urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。它以urlopen函数的形式提供了一个非常简单的接口。最简单的urllib2的应用代码只需要四行。我们新建一个文件urllib2_test01.py来感受一下urllib2的作用:1 import urllib22 response = urllib2.urlopen(3 html = response.read

5、()4 print html复制代码按下F5可以看到运行的结果:我们可以打开XX主页,右击,选择查看源代码(火狐OR谷歌浏览器均可),会发现也是完全一样的内容。也就是说,上面这四行代码将我们访问XX时浏览器收到的代码们全部打印了出来。这就是一个最简单的urllib2的例子。除了http:,URL同样可以使用ftp:,等等来替代。HTTP是基于请求和应答机制的:客户端提出请求,服务端提供应答。urllib2用一个Request对象来映射你提出的HTTP请求。在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,通过调用urlopen并传入Request对象,将返回一个相关请求re

6、sponse对象,这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。我们新建一个文件urllib2_test02.py来感受一下:5 import urllib2 6 req = urllib2.Request() 7 response = urllib2.urlopen(req) 8 the_page = response.read() 9 print the_page可以看到输出的内容和test01是一样的。urllib2使用相同的接口处理所有的URL头。例如你可以像下面那样创建一个ftp请求。10 req = urllib2.Request(/在HTTP请求

7、时,允许你做额外的两件事。1.发送data表单数据这个内容相信做过Web端的都不会陌生,有时候你希望发送一些数据到URL(通常URL与CGI通用网关接口脚本,或其他WEB应用程序挂接)。在HTTP中,这个经常使用熟知的POST请求发送。这个通常在你提交一个HTML表单时由你的浏览器来做。并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非urllib2。我们新建一个文件urllib2_test03.py来感受一下:11 import ur

8、llib 12 import urllib2 13 14 url = 15 16 values = name : WHY, 17 locationSDU18 languagePython 19 20 data = urllib.urlencode(values) # 编码工作21 req = urllib2.Request(url, data) # 发送请求同时传data表单22 response = urllib2.urlopen(req) #接受反馈的信息23 the_page = response.read() #读取反馈的内容如果没有传送data参数,urllib2使用GET方式的请求

9、。GET和POST请求的不同之处是POST请求通常有副作用,它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。Data同样可以通过在Get请求的URL本身上面编码来传送。24 import urllib2 25 import urllib26 27 data = 28 29 data = 30 data31 data32 33 url_values = urllib.urlencode(data) 34 print url_values35 36 name=Somebody+Here&language=Python&location=Northampton 37 url = 38

10、full_url = url + ? + url_values39 40 data = urllib2.open(full_url) 这样就实现了Data数据的Get传送。2.设置Headers到http请求有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器。默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.7),这个身份可能会让站点迷惑,或者干脆不工作。浏览器确认自己身份是通过User-Agent头,当你创建了一个请求对象,你可以给他一个包含头数据的字典。下面的例子发送跟

11、上面一样的内容,但把自身模拟成Internet Explorer。(多谢大家的提醒,现在这个Demo已经不可用了,不过原理还是那样的)。41 import urllib 42 import urllib2 43 44 url = 45 46 user_agent = Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)47 values = 48 49 50 51 headers = User-Agent user_agent 52 data = urllib.urlencode(values) 53 req = urllib2.Request(url,

12、 data, headers) 54 response = urllib2.urlopen(req) 55 the_page = response.read()Python网络爬虫(三):异常的处理和HTTP状态码的分类先来说一说HTTP的异常处理问题。当urlopen不能够处理一个response时,产生urlError。不过通常的Python APIs异常如ValueError,TypeError等也会同时产生。HTTPError是urlError的子类,通常在特定HTTP URLs中产生。1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的

13、情况下产生。这种情况下,异常同样会带有reason属性,它是一个tuple(可以理解为不可变的数组),包含了一个错误号和一个错误信息。我们建一个urllib2_test06.py来感受一下异常的处理:2 3 req = urllib2.Request()4 5 try: urllib2.urlopen(req)6 7 except urllib2.URLError, e:8 print e.reason按下F5,可以看到打印出来的内容是:Errno 11001 getaddrinfo failed也就是说,错误号是11001,内容是getaddrinfo failed2.HTTPError服务

14、器上每一个HTTP 应答对象response包含一个数字状态码。有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答。例如:假如response是一个重定向,需要客户端从别的地址获取文档,urllib2将为你处理。其他不能处理的,urlopen会产生一个HTTPError。典型的错误包含404(页面无法找到),403(请求禁止),和401(带验证请求)。HTTP状态码表示HTTP协议所返回的响应的状态。比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。如果请求的资源不存在, 则通常返回404错误。HTTP状态码通常分为5种类型,分别以

15、15五个数字开头,由3位整数组成:-200:请求成功 处理方式:获得响应的内容,进行处理 201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到 202:请求被接受,但处理尚未完成 处理方式:阻塞等待 204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。 处理方式:丢弃300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃301:请求到的资源都会分配一个永久的URL,这

16、样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL 304 请求的资源未更新 处理方式:丢弃 400 非法请求 处理方式:401 未授权 处理方式:403 禁止 处理方式:404 没有找到 处理方式:5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求 处理方式:HTTPError实例产生后会有一个整型code属性,是服务器发送的相关错误号。Error Codes错误码因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看

17、到400-599的错误号码。BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。你可以使用HTTPError实例作为页面返回的应答对象response。这表示和错误属性一样,它同样包含了read,geturl,和info方法。我们建一个urllib2_test07.py来感受一下:9 import urllib211 12 try:13 urllib2.urlopen(req)14 15 except urllib2.URL

18、Error, e:16 17 print e.code18 #print e.read()按下F5可以看见输出了404的错误码,也就说没有找到这个页面。3.Wrapping所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。推荐使用第二种。我们建一个urllib2_test08.py来示范一下第一种异常处理的方案:19 from urllib2 import Request, urlopen, URLError, HTTPError20 21 req = Request(22 23 try:24 25 response = urlopen(req)27 except

19、HTTPError, e:29 print The server couldnt fulfill the request.30 31 print Error code:, e.code33 except URLError, e:34 35 print We failed to reach a server.36 37 print Reason:, e.reason38 39 else:40 print No exception was raised.41 # everything is fine和其他语言相似,try之后捕获异常并且将其内容打印出来。这里要注意的一点,except HTTPEr

20、ror 必须在第一个,否则except URLError将同样接受到HTTPError 。因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError )。我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:42 from urllib2 import Request, urlopen, URLError, HTTPError44 req = Request(45 46 try:47 48 response = urlopen(req) 49 50 except URLError, e:51 52 i

21、f hasattr(e, ):53 54 print 55 56 print , e.code 57 58 elif hasattr(e, reason59 60 print 61 62 print , e.reason 63 64 65 else:66 print 67 # everything is fine Python网络爬虫(四):Opener与Handler的介绍和实例应用在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和getur

22、l()1.geturl():这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。获取的URL或许跟请求URL不同。以人人中的一个超级链接为例,我们建一个urllib2_test10.py来比较一下原始URL和重定向的链接:68 from urllib2 import Request, urlopen, URLError, HTTPError69 70 71 old_url = 72 req = Request(old_url)73 response = urlopen(req) 74 print Old url : + old_url75 print Real url : + response.geturl()运行之后可以看到真正的链接指向的网址:2.info():这个返回对象的字典对象,该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage 实例。经典的headers包含Content-lengthContent-type,和其他内容。我们建一个urllib2_test11.py来测

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

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