如何用Requests构建爬虫?

摘要:一、request入门 之前写过一个urllib的爬虫方法,这个库是python内建的,从那篇文章也可以看到,使用起来很繁琐。现在更流行的一个爬虫库就是requests,他是基于urllib3封装的,也就是将之前比较繁琐的步骤封装到一块,更
一、request入门   之前写过一个urllib的爬虫方法,这个库是python内建的,从那篇文章也可以看到,使用起来很繁琐。现在更流行的一个爬虫库就是requests,他是基于urllib3封装的,也就是将之前比较繁琐的步骤封装到一块,更适合人来使用。   该库中主要有7个方法:request() get() head() post() put() patch() delete() 他们的作用也就是他们的字面意思(例如:get获取网页信息,post提交信息等等),具体的可以自行查询。   下面先从最简单的使用开始,尽可能的用例子展示他都可以干什么。 1 import requests 2 3 r = requests.get("https://www.icourse163.org/home.htm?userId=1021614219#/home/course") # get方法,从网页上获取信息 4 r.status_code # http请求的返回状态,为200时表示正常访问 5 6 print(r.encoding) # 从HTTPheader中猜测的响应内容编码方式 7 print(r.apparent_encoding) # 从内容分析出响应内容编码方式(备选编码方式)   上面使用get方法就已经得到了网页信息,返回值时200。r字母代表着response,也就是访问网页的响应。网页内的信息可能会有汉字等等,为了方便以后使用,在开始就先说明一下这个,encoding和apparent_encoding在上面解释了,最后是为了使用一个可以把网页正确解析的编码格式。   一般来说,可以使用r.encoding = 'utf-8'或者r.encoding = r.apparent_encoding。 1 # 已经访问到了网页,那么就要看一下提取到的内容 2 3 r.text # http响应内容的字符串形式,url对应的页面内容 4 5 r.headers # 返回响应的头部信息 6 7 r.content # http响应内容的二进制形式 8 9 r.json # 返回json格式,需要提前导入json包   其中二进制格式,可以方便的存储一些图片格式等等的数据,例如需要下载一个照片,可以使用‘wb’格式写到文件当中,当然也可以直接使用库中的方法。 二、异常处理   在我们爬取一些网页的时候,经常会遇到一系列的问题,访问不到页面,禁止访问之类的,或者一些自身代码的一些问题。如果代码量很多,或者具体一点,比如正在从网站爬取一些照片。当跑到其中一张图片时没有正常的访问到,那么整个程序就卡在这里了。后续的照片也就无法爬取了。这当然不是我们想要的,因此就需要一些对异常的处理,让他出现异常时,继续执行后续的程序。异常捕获在python的基础里面已经有了,就是用那个在这里应用一下。 1 import requests 2 from requests.exceptions import ReadTimeout, ConnectionError, RequestException 3 try: 4 response = requests.get("http://httpbin.org/get", timeout = 0.5) 5 print(response.status_code) 6 except ReadTimeout: 7 print('Timeout') 8 except ConnectionError: 9 print('Connection error') 10 except RequestException: 11 print('Error')   如果是刚接触的人可能看到这么多长串的字符有些记不清,其实也可以先不去管他是什么样的异常,只要是异常就反馈回来。   response.raise_for_status() 这个方法可以捕获异常,使得出现异常时就会跳到except中执行,而不影响整体进程。下面是一个通用的格式来捕获异常。
阅读全文