python-爬虫(1)

来源:互联网 发布:ubuntu无法登录界面 编辑:程序博客网 时间:2024/06/05 10:21

python爬虫主要分为三个部分:抓取、分析以及存储。

1、抓取:如何抓取网页内容呢?使用urllib2或者request抓取网页内容。
打开百度-图片,我们看到的是一张张精美的图片,这个过程其实是用户输入网址之后,经过DNS服务器解析,找到服务器主机,向主机申请访问,主机经过解析之后发送回浏览器HTML+JS+CSS等代码,浏览器对这些代码进行解析便可以看到我们申请访问的内容。

下面我们抓取百度首页的源码为例:
1、使用urllib2库

import urllib2url= "http://www.baidu.com"response = urllib2.urlopen(url)print response.read()

将代码写入一个文件并保存,在相应的目录执行命令查看结果。

python e.py

这里写图片描述

传入url,这个是百度网页的首页,协议是HTTP协议,当然你也可以把HTTP换做FTP,FILE,HTTPS 等等,这只是代表了一种访问控制协议,urlopen可以接受三个参数:

urlopen(url, data, timeout)

参数1:url就是我们将要访问的网址。
参数2:data是我们要上传到服务器的地址。
参数3:tiemout是超时时间。
当然第2、3个参数是可以不传送的,data默认为空None,timeout默认为socket._GLOBAL_DEFAULT_TIMEOUT。

方法返回一个response对象,返回的所有信息都保存在这个对象中。
使用该对象的read()方法,读取对象中的内容。

2、使用request
我们也可以使用request请求,Request类的实例,构造时传入url,data等内容。比如上面的两行代码,我们可以这么改写:

import urllib2url = "http://www.baidu.com"request = urllib2.Request(url)response = urllib2.urlopen(request)print response.read()

这种写法中间多一个request对象,建议大家如是写,因为有些时候我们爬取网页的时候,还要上传一些其他的信息,这时候使用request就会好很多,通过构建一个request(请求),服务器响应请求,这样更容易看明白。

上面的程序向大家展示了如何抓取静态网页的内容,不过大多数时候都是动态的,既需要你传递参数给它,比如登陆账号和密码。怎么办呢?这时候就用到了我们前面说的data参数了。
我们将需要上传的账号密码等信息,传送到url中,得到服务器的响应。

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

import urllib2import urlliburl = "http://passport.xxxx.net/account/login"values = {"account":"wdf880817@sina.com", "password":"xxxxxxx"}data = urllib.urlencode(values) geturl = url + '?' + datarequest = urllib2.Request(geturl)response = urllib2.urlopen(request)print response.read()

字典的定义方式还有一种:

import urllib2import urlliburl = "http://passport.xxxx.net/account/login"values = {}values["account"] = "wdf880817@sina.com"values["password"] = "xxxxxxxxxx"data = urllib.urlencode(values) geturl = url + "?" + datarequest = urllib2.Request(geturl)response = urllib2.urlopen(request)print response.read()

将geturl打印出来,我们得到

http://xxxxxx.csdn.net/account/login?account=wdf880817@sina.com&password=xxxxxxxx

这样我们就得到了http://xxxxxx.csdn.net网页中,账号密码分别为wdf880817@sina.com和xxxxxxxx的用户的相关数据。

原创粉丝点击