python3 爬虫学习 第一弹

1.0.使用urllib库

在 Python2 中,有 urllib和 urllib2两个库来实现请求的发送。 而在 Python3 中,已经不存在 urllib2这个库了 , 统一为 urllib,urllib库,它是 Python 内置的 HTTP请求库 ,也就是说不需要额外安装即可使用 它包含如下 4个模块。

1.request: 它是最基本的 HTTP 请求模块,可以用来模拟发送请求 。 就像在浏览器里输入网挝 然后回车一样,只需要给库方法传入 URL 以及额外的参数,就可以模拟实现这个过程了 。

2.error: 异常处理模块,如果出现请求错误 , 我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止 。

3. parse: 一个工具模块,提供了许多 URL处理方法,比如拆分、解析 、 合并等。

4.robotparser:主要是用来识别网站的 robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得 比较少 。

1.1发送请求

使用 urllib 的 request 模块 ,我们可以方便地实现请求的发送并得到响应 。

1.urlopen()的使用

urllib.request 模块提供了最基本的构造 HTTP请求的方法, 利用它可以模拟浏览器的一个请求发起过程, 同时它还带有处理授权验证( authenticaton )、重定向( redirection)、浏览器 Cookies 以及其 他内容


如果输入图一的代码后,会出现图二的错误,则说明是访问需要ssl证书验证,此时我们需要单独处理ssl验证让程序忽略此验证,  注:引入ssl库的_create_unverified_context()函数


此时则能获取到https://www.python.org的html超文本。


我们发现其类型为HTTPResponse类型,主要包含 read()、 readinto()、 getheader(name)、getheaders()、 fileno()等方法,以及 msg、 version、 status、 reason、 debuglevel、 ιlosed等属性。

例如,调用 read()方法可以得到返回的网页内容,调用 status 属性可以得到返回结果的状态码 ,如 200代表请求成功, 404代表网页未找到等 。


利用最基本的 urlopen()方法,可以完成最基本的简单网页的 GET请求抓取。

2.data参数

data 参数是可选的 。 如果要添加该参数,并且如果它是字节流编码格式的内容,即 bytes 类型,则需要通过 bytes()方法转化。 另外,如果传递了这个参数,则它的请求方式就不再是 GET方式,而 是 POST方式。


这里我们传递了一个参数 word,值是 hello 它需要被转码成 bytes (字节流)类型。 其中转字节流采用了 bytes()方法,该方法的第一个参数需要是 str (字符串)类型,需要用 urllib.parse 模块里的 urlencode()方法来将参数字典转化为字符串;第二个参数指定编码格式,这里指定为 utf8。

3.timeout参数

timeout参数用于设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间, 还没有得到响应 , 就会抛出异常。 如果不指定该参数 ,就会使用全局默认时间 。 它支持 HTTP, HTTPS、 FTP请求


这里我们设置超时时间是0.1秒。程序0.1秒过后,服务器依然没有响应,于是抛出了 URLError异常。民异常属于 urllib.error模块,错误原因是超时。

因此,可以通过设置这个超时时间来控制一个网页如果长时间未响应,就跳过它的抓取。 这可以利用 try except 语句来实现 ,相关代码如下:


则会输出 TIME OUT内容

你可能感兴趣的:(python3 爬虫学习 第一弹)