python编写爬虫时urllib.request库和requests库的区别

245 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

关于urllib.request和requests的区别简单通俗的来说就是前者 不如后者更加使用和方便.

urllib.request

导入方法:

import urllib.request

简介:

该模块中的urlopen()方法能对网站发出最基本的请求,在一些没有反爬机制的网站中可以使用该方法去对web网页发送请求,然后解码,从而获得网页.

 
    url1 = "http://www.zueb.edu.cn/site/xsgate/xsyw/index.html"
    print(url1)
    # 打开网页
    rep = urllib.request.urlopen(url1)
    # 获取网页内容
    try:
        html = rep.read().decode('utf-8')
    except:
        print("出错了!")

其中urlopen()方法返回的是一个http.client.HTTPResponse对象,然后通过read()方法进一步处理,一般情况下使用read()后处理后,我们需要用decode()进行解码,通常为utf-8,经过这些步骤后,最终才获取到我们想要的网页。

urllib库的response对象是先创建httprequest对象,装载到reques.urlopen里完成http请求,返回的是httpresponse对象,实际上是html属性.

requests

导入方法:

import requests

简介: 通常而言,在我们使用爬虫时,更建议用requests库,因为requests比urllib更为便捷,requests可以直接调用get,post,而urllib.request只能先构造get,post,然后再调用.

requests库调用是requests.get方法传入url和参数,返回的对象是Response对象,打印出来是显示响应状态码,通过.text 方法可以返回是unicode 型的数据.

框架为:

def getHTML(url):
    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding =r.apparent_encoding
        return  r.text
    except:
        return  "产生异常."

总而言之,urllib.request没有requests更加方便.

关于反爬:

通常而言,在我们编写爬虫爬取网站时会遇到一些具有反爬机制的网站,这时候我们要对爬虫进行伪装,通常方法是在构造http请求的时候,要加上一些额外的请求头,或者添加代理服务器。这些信息我们可以在用浏览器正常打开网站时或者通过编写一些代码获取.