在(一)刚入爬虫坑(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:上下文
下面写一个小例子:
![](https://img.haomeiwen.com/i13981000/a5f2953518966ca9.png)
![](https://img.haomeiwen.com/i13981000/d37baaafc06f110c.png)
如果想模拟浏览器发送请求,可以自定义一个request,填写一个浏览器的User-Agent,直接上代码:
![](https://img.haomeiwen.com/i13981000/23d16b6a4157bf9f.png)
刚才的代码中只是输出了html,response里面还有很多的信息,可以一个一个打印看一下。
![](https://img.haomeiwen.com/i13981000/5e5822410ee1d88e.png)
User-Agent是反爬虫的第一步,但不能只是一个User-Agent,可以写一个列表,然后每一次请求都换一个User-Agent才能更好的欺骗服务器。
代码如下:
![](https://img.haomeiwen.com/i13981000/59413293d80b85d8.png)
urlencode():
在使用百度搜索引擎的时候,搜索是使用了get方式进行请求,传递了wd=****的参数。
![](https://img.haomeiwen.com/i13981000/ad593a1c401dfd41.png)
我们可以把浏览器地址复制一下,粘贴到文档中,可以发现url变样了,汉字变成了另一种编码。
https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7
这就是URL的编码,在做爬虫的时候也需要对一些文字做一些编码转换,直接上代码:
![](https://img.haomeiwen.com/i13981000/39f4a1250fcfbbde.png)
urlencode方法把键值对形式{ "wd" : "百度贴吧" }转换成了字符串形式"wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7",同时也对汉字进行了编码操作。
上面只是测试了几个方法,接下来使用上面写的方法做一个小案例,写一个百度贴吧的爬虫。
![](https://img.haomeiwen.com/i13981000/d8d937fb445c88a5.png)
上面代码就是都是GET请求的方式,也就是把参数拼接在url中,接下来我们研究一下POST请求:
urlopen()中有一个参数是data,它就是POST请求中传递参数的方式,可以试试写一个关于有道翻译的POST请求,话不多说直接上代码:
![](https://img.haomeiwen.com/i13981000/a5b00f06b9776422.png)
![](https://img.haomeiwen.com/i13981000/30140863fb13a1b6.png)
这里面的headers中的数据 和 post_data数据 可以直接从抓包工具或者浏览器中复制。
headers里面有一个cookies,在某一些网站是需要登陆然后才能浏览到数据,此时就可以使用cookies绕过登录界面,直接进行页面的抓取。这个以后会经常遇到,接下来会介绍到。
网友评论