Python爬虫入门三urllib库基本使用

urllib是一个收集了多个涉及了URL的模块的包:

URL获取网页

urllibtest.py

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

运行结果:

C:\Python27\python.exe H:/spiderexercise/spidertest/urllibtest.py
<!DOCTYPE html><!--STATUS OK-->
    <html><head><meta http-equiv="Content-Type" 
    content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" 
    content="IE=edge,chrome=1"><meta content="always" name="referrer">
    <meta name="theme-color" content="#2932e1"><meta name="description" 
    content="全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所
    求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link 
    rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="search" 

urlopen()一般接受三个参数。
urlopen(url, data, timeout)
第一个参数 url 即为 URL,第二个参数 data 是访问 URL 时要传送的数据,第三个 timeout 是设置超时时间。 第二三个参数是可以不传送的,data 默认为空 None,timeout 默认为 socket._GLOBAL_DEFAULT_TIMEOUT 第一个参数 URL 是必须要传送的,在这个例子里面我们传送了百度的 URL,执行 urlopen 方法之后,返回一个 response 对象,返回信息便保存在这里面。
response 对象有一个 read 方法,可以返回获取到的网页内容。
print(response.read())

构造request获取网页

urlopen()参数可以传入一个request请求,即Request类的实例。构造request时传入URL,Data。

urllibtest.py

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

POST和GET数据传送

数据传送分为 POST 和 GET 两种方式,两种方式有什么区别呢? 最重要的区别是 GET 方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST 则不会在网址上显示所有的参数,不过如果你想直接查看提交了什么就不太方便了
POST方式
我们引入了 urllib 库,现在我们模拟登陆 CSDN

urllibtest.py

import urllib
import 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())

当然上述代码可能登陆不进去,因为 CSDN 还有个流水号的字段,没有设置全,比较复杂在这里就不写上去了,在此只是说明登录的原理。一般的登录网站一般是这种写法。 我们需要定义一个字典,名字为 values,参数我设置了 username 和 password,下面利用 urllib 的 urlencode 方法将字典编码,命名为 data,构建 request 时传入两个参数,url 和 data,运行程序,返回的便是 POST 后呈现的页面内容。
GET方式
至于 GET 方式我们可以直接把参数写到网址上面,直接构建一个带参数的 URL 出来即可。

import urllib
import urllib2

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

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

http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值