分享

UC头条:Python网络爬虫之Urllib库的使用

 bdpqlxz 2020-04-04

1 简单爬取一个网页

怎么爬取一个网页内容那?首先我们要知道其URL,然后根据URL来请求远程web服务器将网页内容发给我们就好了。当我们在浏览器看到一副画面唯美的页面,其实这是由浏览器经过渲染后呈现出来的,实质上是一段HTML内容,加上CSS和JS。如果将一个网页比作一个人的话,HTML就是人的骨架,CSS就像是人的衣服,JS就是人的肌肉,所以最重要的就是HTML,下面我们就用简单的两行代码来请求获得百度首页的HTML内容:

执行该Python代码,打印出来便是百度首页的HTML内容:

2代码解析

这行代码我们调用了urllib库中request模块的一个urlopen方法,并传了它一个网页地址,我们看看urlopen方法的原始定义:

其他几个参数都是默认参数,可不传递,其中data是访问URL时传送的数据,timeout参数是设置访问超时的。Urlopen返回的是一个response是什么那?打印出来为:

http.client.HTTPResponseobjectat0x000002A2EC452408 >

可见response是一个HTTPResponse对象,所以利用其read方法获取HTML页面内容。

3构造Request

其实在实际的编程中,我们一般不会直接给urlopen函数只是传递一个网址,因为一个完成的URL请求会包含很多内容,所以在request模块里有一个Requst类,封装了URL请求所需的众多参数,所以在请求服务器之前,先构建了一个Request对象,这样就显得逻辑很清楚了,如下:

4数据传送方法GET和POST

上面方法获取到的是一个静态页面,现在的网页大多都是动态网页,需要动态的给网站传递参数,然后网站做出对应的响应,比如登录注册操作,这就要用到数据传送。

数据传送有两种方法,一种是GET,另一种是POST,两种方法的区别是GET方法是直接以链接的方式进行传送,参数包含在链接中,传了什么参数一目了然,缺点是参数不安全;POST方法则不会讲参数直接放到链接中,你想直观的看到传递参数就没那么容易了,但从安全角度来讲会更好。

POST方式:

上面说到urlopen函数中有一个参数data,就是用来传送请求数据的,POST方式就是借助data参数来传递的,如下:

首先需要构造一个包含用户名和密码的字典数据usr,然后用urllib.parse中的方法urlencode方法对字典数据进行编码,并将其传递给request对象中,这样就完成了POST动态网页的请求操作。

GET方式:

GET方式则是直接将用户名和密码参数写到网址中,构造一个新的URL,再进行请求,如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多