python 爬虫(一)

来源:互联网 发布:百分点vb 诱鱼 编辑:程序博客网 时间:2024/05/20 01:09

python 网页爬虫

Heade r网页头部信息:

Server:CentOSMicrosoft_IIS (网页所在服务器)

Content-Type:text/html;charset=GBK

Last-Modified:Wed,19 Feb 2014 01:42:21 GMT


urllib模块中的方法

1.urllib.urlopen(url[,data[,proxies]])

打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作。本例试着打开

response = urllib2.urlopen("http://www.baidu.com")print response.read()# print response.read().decode("gbk").encode("utf-8")

2.分析扒网页的方法

那么我们来分析这两行代码,第一行

response = urllib.urlopen("http://www.baidu.com")
首先我们调用的是urllib库里面的urlopen方法,传入一个URL,这个网址是百度首页,协议是HTTP协议,当然你也可以把HTTP换做FTP,FILE,HTTPS 等等,只是代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:

urlopen(url, data, timeout)

第一个参数url即为URL,第二个参数data是访问URL时要传送的数据POST/GET,第三个timeout是设置超时时间。

第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT

第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。

1. get是从服务器上获取数据,post是向服务器传送数据。2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 建议:1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
get的方式是把数据在地址栏中明文的形式发送
post则不是,而且post可以传递的数据比get多


print html.info()
获得网页信息,所在服务器,修改时间,编码方式等

print html.getcode()
返回网页状态码,200表示可以正常访问,3XX重定向:比如访问baidu.com,自动跳转到http://wwwbaidu.com,301永久重定向,302暂时重定向,404网页不存在,403禁止访问:网站设置密码加密,禁止用户访问和抓取 500系列指服务器忙

html.close()
关闭

获取网页后,如何下载

urllib.urlretrieve(url,"path\\abctxt");
path 路径



POST方式:

上面我们说了data参数是干嘛的?对了,它就是用在这里的,我们传送的数据就是这个参数data,下面演示一下POST方式。


import urllibimport urllib2 values = {"username":"1016903103@qq.com","password":"XXXX"}data = urllib.urlencode(values) url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"request = urllib2.Request(url,data)response = urllib2.urlopen(request)print response.read()

我们引入了urllib库,现在我们模拟登陆CSDN,当然上述代码可能登陆不进去,因为CSDN还有个流水号的字段,没有设置全,比较复杂在这里就不写上去了,在此只是说明登录的原理。一般的登录网站一般是这种写法。

我们需要定义一个字典,名字为values,参数我设置了username和password,下面利用urllib的urlencode方法将字典编码,命名为data,构建request时传入两个参数,url和data,运行程序,返回的便是POST后呈现的页面内容。

注意上面字典的定义方式还有一种,下面的写法是等价的

import urllibimport urllib2 values = {}values['username'] = "1016903103@qq.com"values['password'] = "XXXX"data = urllib.urlencode(values) url = "http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"request = urllib2.Request(url,data)response = urllib2.urlopen(request)print response.read()

你可以print geturl,打印输出一下url,发现其实就是原来的url加?然后加编码后的参数

http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX

和我们平常GET访问方式一模一样,这样就实现了数据的GET方式传送。
原创粉丝点击