Python爬虫基础—requests库

     之前尝试接触爬虫,比较零散也比较陌生,最近通过公众号等资料整理并再学习下。


     网络爬虫就是按照一定规律从互联网上抓取信息的程序,爬虫与用户正常访问信息的区别就在于:用户是缓慢、少量的获取信息,而爬虫是大量的获取信息。而我们常见的搜索引擎:如Google、百度、雅虎、搜狗、必应等等,其本质就是一个(可能多个)巨大爬虫。

     下面就是一段hello world级别的Python爬虫,它等效于你在百度搜索关键字:python。

import requests

def spider_baidu():
   url='http://www.baidu.com/s'
   kv={'wd':'python'}
   try:
      r=requests.get(url,params=kv)
      r.raise_for_status()
      print(r.text[:1000])
   except:
      print('失败')

spider_baidu()

     那么从爬虫必备库requests开始,requests库可以说是中小规模爬虫的神器,简单来说requests库主要是用来向服务器提交某些所指定url申请并获取网页界面内容(网页内容的源代码),本文就其主要方法和常用的异常处理简单介绍,便于快速上手。若想详细了解,可以查看requests库的官方文档。

requests库的安装(基于Windows操作系统,保证网络畅通)

      按下win+R键,输入cmd,打开命令窗口,输入pip install requests,按下enter键即可。

测试:

      #导入requests库,执行不报异常则为安装成功。

      >>>import requests

#小试牛刀
import requests
#提交url申请 获取http网页信息
response=requests.get('http://www.baidu.com')
response.status_code#若状态码为200,则该网页可爬取
#200

主要方法:

requests.request()  #构造一个请求,支撑以下各方法的基础方法;

requests.get()      #获取HTML网页的主要方法,对应于HTTP的GET;

requests.head()   #获取HTML网页头信息的方法,对应于HTTP的HEAD;

requests.post()   #向HTML网页提交POST请求的方法,对应于HTTP的POST;

requests.put()    #向HTML网页提交PUT请求的方法,对应于HTTP的PUT;

requests.patch()   #向HTML网页提交局部修改请求,对应于HTTP的PATCH;

requests.delete()   #向HTML页面提交删除请求,对应于HTTP的DELETE.

例如: r = requests.get(url,params,**kwargs),url是需要爬取的网站地址,params是指url中的额外参数,字典或者字节流格式,可选,**kwargs是12个控制访问的参数。 这句代码其等号右侧内容是想服务器发送一个该网页的请求,左侧是服务器返回的一个包含相应网页资源的Response,Response对象具有很多属性。

>>> r.status_code

200

#这是response的一个状态码属性,表示HTTP的返回状态,返回200则表示连接成功,可以进行爬取,若返回404或者其他的数字,则表示未成功,需要对代码进行技术处理,否则不能爬取。

>>>r.content

#这是HTTP相应内容的二进制形式,不利于理解。

>>>r.text

#这是HTTP相应内容的字符串形式,是通过编码方式转码后输出的内容,通常是通过utf-8编码方式进行转码,利于我们理解。

>>> r.encoding

'ISO-8859-1'

#这个是从HTTP头部信息猜测的url所用的编码方式,如果按上面的这个编码方式进行输出文本,会发现看不懂(也就是我们经常说的乱码,其实是用了一种我们不能理解的编码方式)。可以用r.encoding = r.apparent_encoding(也可写为utf-8)处理,URL的编码方式将会转变会右侧的方式(utf-8编码方式),便于我们理解。

异常:

     代码在编写完进行运行时,总是会出现各种异常,而使用requests库也会发生异常,比如连接失败的异常,还有 requests.HTTPError(HTTP错误异常),requests.URLRequired(URL缺失异常),requests.Timeout(请求URL超时异常)等异常。于是requests库给出了一种综合的异常处理方法:r.raise_for_status(),来解决response异常,这种方法是在其内部进行处理,但凡发生如上异常,该处理方法就会引发异常,相应代码块就不再执行,或者执行提前编号的应对异常抛出的异常处理代码块,这种方法的好处就是便于使用 try-except 方法进行异常处理。

     下面是爬取网页的通用代码框架

import requests

def get_html_text(url):
   try:
      r=requests.get(url)#提交请求,获取响应
      r.raise_for_status()#判断有无异常
      r.encoding=r.apparent_encoding#转码
      return r.text
   except:
      print('失败')

if __name__=='main':
   url='http://www.baidu.com'
   print(get_html_text(url))
发布了19 篇原创文章 · 获赞 2 · 访问量 2198

猜你喜欢

转载自blog.csdn.net/xiaoyeren_ITRoad/article/details/104301543