Python爬虫学习一——requests库

Python爬虫学习一——requests库

  • Python爬虫学习一requests库
    • 安装requests库
    • requests库常用方法简介
      • 1 get方法
        • robots协议

requests库是用来获取网页内容的python库,具有小巧灵活的特点,适合于python爬虫的学习。

1 安装requests库

一般来说,anaconda已经安装了requests库(anaconda安装参见Python-opencv环境配置),可以在anaconda中检查是否安装:打开anaconda,选择environment,输入requests,可以看到是否安装。
Python爬虫学习一——requests库_第1张图片
确认已经安装,就可以测试一下,打开Spyder,在命令行中输入:

import requests

我们测试是否能连接百度:

r = requests.get("https://www.baidu.com")

通过返回码判断是否获取成功:

print r.status_code
>>> 200

返回值是200,说明获取正确(只要返回值不是200,基本上获取是失败的)
也可以打印获取的内容:

print r.text

输出太多,我就不贴了。

2 requests库常用方法简介

requests库有7种主要方法,分别是:

名称 方法
requests.request() 其他方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获HTML取网页信息头的方法
requests.post() 向HTML网页POST请求的方法
requests.put() 向HTML网页提交PUT请求的方法
requests.patch() 向HTML提交局部修改的请求的方法
requests.delete() 向HTML页面提交删除请求

requests库中最常用的是get()方法。

2.1 get方法

原函数:requests.get(url, params=None, **kwargs)
url表示网页地址,params表示url中的额外参数,kwargs表示12个访问控制的参数。
get方法返回一个Respond对象,主要有以下属性:
Python爬虫学习一——requests库_第2张图片
需要注意的是,encoding是根据网页内容中的charset关键字设置的,如果不存在,会设置一个默认值,apparent_encoding是根据网页内容推断出的编码,具有较高的准确性。因此encoding和apparent_encoding有时候不一样。如果打印出来的返回信息带有一定乱码,就需要设置Respond对象的encoding方式,一般来说,设置成utf-8编码就能正确显示了:

r.encoding = 'utf-8'

再次打印就可以看到中文字符了。
另外,还可以使用

r.encoding = r.apparent_encoding

来设置返回内容的编码。
requests库也会出现异常,主要有:
Python爬虫学习一——requests库_第3张图片
通过异常可以判断出现了何种错误,并不一定所有的异常都是代码引起的,也有可能是网络原因。
使用get方法可以编写网页获取的框架:

def getHTMLText(url):
    try:
        headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}  
        r = requests.get(url, headers = headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "" 

try…except的使用可以避免错误导致程序中断,保证程序的继续运行。

robots协议

例子中定义了一个长长的headers,目的是使爬虫模拟浏览器获取网页内容。爬虫的应用并不是完全无害的,主要会带来三个问题:一是对服务器的性能骚扰;二是爬取有产权归属内容并牟利带来的法律风险;三是爬虫可能突破简单访问控制,获取隐私信息导致信息泄露。一般来说,网站会通过来源审查和robots协议来限制爬虫使用,来源审查比较严格,服务器会只响应浏览器和友好爬虫的请求,拒绝其他请求;robots协议是一个公告,告知爬虫的爬取策略,要求爬虫遵守。robots协议在网站的根目录下,如京东的robots协议地址就是http://www.jd.com/robots.txt ,robots协议中,*表示所有,/表示根目录。爬取网站之前,一定要看一下robots协议,尽可能的遵守协议。

你可能感兴趣的:(python爬虫)