首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python爬虫常用库之urllib详解

这是日常学python的第10篇原创文章

以下为个人在学习过程中做的笔记总结之爬虫常用库urllib

urlib库为python3的HTTP内置请求库

urilib的四个模块:

urllib.request:用于获取网页的响应内容

urllib.error:异常处理模块,用于处理异常的模块

urllib.parse:用于解析url

urllib.robotparse:用于解析robots.txt,主要用于看哪些网站不能进行爬取,不过少用

1

urllib.request

url:为请求网址

data:请求时需要发送的参数

timeout:超时设置,在该时间范围内返回请求内容就不会报错

示例代码:

可以使用上面的代码对一些网站进行请求了,但是当需要一些反爬网站时,这就不行了,这时我们需要适当地增加请求头进行请求,这时就需要使用复杂一点的代码了,这时我们需要用到Request对象

代码示例:

这个我添加了请求头进行请求,使我发送的请求更加接近浏览器的行为。可以对应一些反爬网站了

如果网站需要进行登陆,这时需要用到post方法,用上面的也是可以的。代码如下:

这里我用到了data的参数把登陆需要的参数传进去,还加了个请求方法Method

parse.urlencode()后面有讲

这里还有另外一种添加请求头的方法

Request.add_header():参数有两个,分别为请求头对应的键和值,这种方法一次只能添加一个请求头,添加多个需要用到循环或者直接用前面的方法添加多个请求头

在登陆了网站之后,我们需要用到cookie来保存登陆信息,这时就需要获取cookie了。urllib获取cookie比较麻烦。

代码示例如下:

单纯地打印没什么用,我们需要把他存入文件来保存,下次使用时再次加载cookie来登陆

保存cookie为文件:

另一种保存方法:

这两种保存格式都是不一样的,需要保存的内容一样。

保存可以了,这时就需要用到加载了,当然也可以。代码如下:

这样就可以实现不用密码进行登陆了。

cookie小总结:在操作cookie时,都是分五步,如下:

进行导包,至关重要的一步,不导包直接出错。

获取cookie处理对象,使用cookiejar包

创建cookie处理器,使用request.HTTPCookieJarProcessor()

利用cookie处理器构建opener,使用request.build_opener()

进行请求网站,用opener.open(),这个不能用request.urlopen()

如果有时你在同一ip连续多次发送请求,会有被封ip的可能,这时我们还需要用到代理ip进行爬取,代码如下:

可以看到越复杂的请求都需要用到request.build_opener(),这个方法有点重要,请记住哈

2

urllib.error

将上面的使用代理ip的请求进行异常处理,如下:

因为有时这个ip或许也被封了,有可能会抛出异常,所以我们为了让程序运行下去进而进行捕捉程序

error.URLError: 这个是url的一些问题,这个异常只有一个reason属性

error.HTTPError:这个是error.URLError的子类,所以在与上面的混合使用时需要将这个异常放到前面,这个异常是一些请求错误,有三个方法,.reason(), .code(), .headers(),所以在捕捉异常时通常先使用这个

3

urllib.parse

简单的使用:

可以看出加了scheme参数和没加的返回结果是有区别的。而当scheme协议加了,而前面的url也包含协议,一般会忽略后面的scheme参数

既然后解析url,那当然也有反解析url,就是把元素串连成一个url

urlparse()接收一个列表的参数,而且列表的长度是有要求的,是必须六个参数以上,要不会抛出异常

4

结语

还有个urllib.robotparse库少用,就不说了,留给以后需要再去查文档吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180311A0IMM200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券