在(一)刚入爬虫坑(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:上下文
下面写一个小例子:


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

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

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的编码,在做爬虫的时候也需要对一些文字做一些编码转换,直接上代码:

urlencode方法把键值对形式{ "wd" : "百度贴吧" }转换成了字符串形式"wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7",同时也对汉字进行了编码操作。
上面只是测试了几个方法,接下来使用上面写的方法做一个小案例,写一个百度贴吧的爬虫。

上面代码就是都是GET请求的方式,也就是把参数拼接在url中,接下来我们研究一下POST请求:
urlopen()中有一个参数是data,它就是POST请求中传递参数的方式,可以试试写一个关于有道翻译的POST请求,话不多说直接上代码:


这里面的headers中的数据 和 post_data数据 可以直接从抓包工具或者浏览器中复制。
headers里面有一个cookies,在某一些网站是需要登陆然后才能浏览到数据,此时就可以使用cookies绕过登录界面,直接进行页面的抓取。这个以后会经常遇到,接下来会介绍到。
网友评论