51Testing软件测试论坛

标题: Python网络爬虫-你的第一个爬虫(requests库) [打印本页]

作者: 测试积点老人    时间: 2019-1-14 14:19
标题: Python网络爬虫-你的第一个爬虫(requests库)
本帖最后由 测试积点老人 于 2019-1-14 14:22 编辑

0.采用requests库

虽然urllib库应用也很广泛,而且作为Python自带的库无需安装,但是大部分的现在python爬虫都应用requests库来处理复杂的http请求。requests库语法上简洁明了,使用上简单易懂,而且正逐步成为大多数网络爬取的标准。


1. requests库的安装

采用pip安装方式,在cmd界面输入:

  1. pip install requests
复制代码

2. 示例代码

我们将处理http请求的头部处理来简单进行反反爬虫处理,以及代理的参数设置,异常处理等。

  1. import requests


  2. def download(url, num_retries=2, user_agent='wswp', proxies=None):
  3.     '''下载一个指定的URL并返回网页内容
  4.         参数:
  5.             url(str): URL
  6.         关键字参数:
  7.             user_agent(str):用户代理(默认值:wswp)
  8.             proxies(dict): 代理(字典): 键:‘http’'https'
  9.             值:字符串(‘http(s)://IP’)
  10.             num_retries(int):如果有5xx错误就重试(默认:2)
  11.             #5xx服务器错误,表示服务器无法完成明显有效的请求。
  12.             #https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
  13.     '''
  14.     print('==========================================')
  15.     print('Downloading:', url)
  16.     headers = {'User-Agent': user_agent} #头部设置,默认头部有时候会被网页反扒而出错
  17.     try:
  18.         resp = requests.get(url, headers=headers, proxies=proxies) #简单粗暴,.get(url)
  19.         html = resp.text #获取网页内容,字符串形式
  20.         if resp.status_code >= 400: #异常处理,4xx客户端错误 返回None
  21.             print('Download error:', resp.text)
  22.             html = None
  23.             if num_retries and 500 <= resp.status_code < 600:
  24.                 # 5类错误
  25.                 return download(url, num_retries - 1)#如果有服务器错误就重试两次

  26.     except requests.exceptions.RequestException as e: #其他错误,正常报错
  27.         print('Download error:', e)
  28.         html = None
  29.     return html #返回html


  30. print(download('http://www.baidu.com'))
复制代码

结果:

  1. Downloading: http://www.baidu.com
  2. <!DOCTYPE html>
  3. <!--STATUS OK-->
  4. ...
  5. </script>

  6. <script>
  7. if(navigator.cookieEnabled){
  8.     document.cookie="NOJS=;expires=Sat, 01 Jan 2000 00:00:00 GMT";
  9. }
  10. </script>



  11. </body>
  12. </html>
复制代码



作者: Miss_love    时间: 2021-1-5 13:38
支持分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2