python-爬虫(1)

本文介绍了Python爬虫的基础知识,包括使用urllib2和requests库抓取网页内容。以抓取百度首页为例,展示了如何构建请求并获取响应。对于动态网页,可以通过传递参数来实现,如登录时传递账号和密码。
摘要由CSDN通过智能技术生成

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

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

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

import urllib2
url= "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 urllib2
url = "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 urllib2
import urllib
url = "http://passport.xxxx.net/account/login"
values = {"account":"wdf880817@sina.com", "password":"xxxxxxx"}
data = urllib.urlencode(values) 
geturl = url + '?' + data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()

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

import urllib2
import urllib
url = "http://passport.xxxx.net/account/login"
values = {}
values["account"] = "wdf880817@sina.com"
values["password"] = "xxxxxxxxxx"
data = urllib.urlencode(values) 
geturl = url + "?" + data
request = 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的用户的相关数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值