(一)刚入爬虫坑(2)——urllib.request库的使用(1)

在(一)刚入爬虫坑(1)——爬虫简介 中提到过urllib2这个库,这个库是python2.7自带的模块,不需要下载。

本篇使用python3,urllib2在python3中被修改为urllib.request。


urlopen():

    urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)

        url : url地址

        data:指明发往服务器请求中的额外的信息

        timeout:连接超时

        cafile、capath、cadefault:跟证书有关,一般不用

        context:上下文

    下面写一个小例子:

此时可以看到控制台打印出的html代码。
但是urlopen有一个弊端,就是不能模拟浏览器进行请求,想要模拟浏览器进行请求,就得需要修改header里面的User-Agent,可以从源码中看到,此时的User-Agent是Python-urllib,明显就是爬虫,所以这个在实际的爬虫项目中并不能使用。

   如果想模拟浏览器发送请求,可以自定义一个request,填写一个浏览器的User-Agent,直接上代码:

此时可以看到控制台打印出的html代码。  

    刚才的代码中只是输出了html,response里面还有很多的信息,可以一个一个打印看一下。

最常用的三个方法。

    User-Agent是反爬虫的第一步,但不能只是一个User-Agent,可以写一个列表,然后每一次请求都换一个User-Agent才能更好的欺骗服务器。

    代码如下:    


切记每一次请求都要带User-Agent

urlencode():

    在使用百度搜索引擎的时候,搜索是使用了get方式进行请求,传递了wd=****的参数。

    我们可以把浏览器地址复制一下,粘贴到文档中,可以发现url变样了,汉字变成了另一种编码。

        https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7

    这就是URL的编码,在做爬虫的时候也需要对一些文字做一些编码转换,直接上代码:

运行后可以得到一个url地址,然后把这个url地址放入到真实的浏览器中,跳转的就是百度搜索“百度贴吧”的网站。

        urlencode方法把键值对形式{ "wd" : "百度贴吧" }转换成了字符串形式"wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7",同时也对汉字进行了编码操作。


    上面只是测试了几个方法,接下来使用上面写的方法做一个小案例,写一个百度贴吧的爬虫。

此时会在当前目录下生成十个html文件,打开看就是获取的内容。

    上面代码就是都是GET请求的方式,也就是把参数拼接在url中,接下来我们研究一下POST请求:

        urlopen()中有一个参数是data,它就是POST请求中传递参数的方式,可以试试写一个关于有道翻译的POST请求,话不多说直接上代码:

上面代码运行获取的Json数据

    这里面的headers中的数据 和 post_data数据 可以直接从抓包工具或者浏览器中复制。

    headers里面有一个cookies,在某一些网站是需要登陆然后才能浏览到数据,此时就可以使用cookies绕过登录界面,直接进行页面的抓取。这个以后会经常遇到,接下来会介绍到。

你可能感兴趣的:((一)刚入爬虫坑(2)——urllib.request库的使用(1))