爬虫的requests库和BeautifulSoup4的学习

下面先来介绍两个库的基本使用

1、Requests库

方法  说明
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.states_code 获取返回的状态码
r.text / r.read() HTTP响应内容文本形式返回
r.content HTTP响应内容的二进制形式
r.json() HTTP响应内容的json形式
r.raw HTTP响应内容的原始形式
r.encoding   返回请求的url
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)

 下面我们通过一个例子来介绍其中部分函数的功能

用get()函数访问一个网站20次,打印返回状态,text()内容,计算text()属性和content()属性所返回的网页内容长度。

 下面来看看例子

1 import requests
2 r=requests.get("https://cn.bing.com/?FORM=Z9FD1")    #得到网页内容
3 r.encoding="UTF-8"                                   #把展示的内容为UTF-8
4 for i in range(20):
5     print(r.status_code)
6 print(r.text)
7 print(len(r.content))
8 print(len(r.text))

再来看看效果

上面的text内容由于太长只显示了这样。

 2、BeautifulSoup4库

Beautiful Soup在解析时实际上是依赖解析器的,它除了支持python标准库中的HTML解析器外还支持第三方解析器如lxml

Beautiful Soup支持的解析器,以及它们的优缺点:

解析器使用方法优势劣势
Python标准库 BeautifulSoup(markup,"html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup,"lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器

BeautifulSoup(markup,["lxml", "xml"])

BeautifulSoup(markup,"xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5lib BeautifulSoup(markup,"html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展

下面再来看一个例子

 1 import re
 2 import requests
 3 from bs4 import BeautifulSoup
 4 a='<!DOCTYPE html>\
 5  <html>\
 6  <head>\
 7  <meta charset="utf-8">\
 8  <title>菜鸟教程(runoob.com)</title>\
 9  </head>\
10  <body>\
11      <h1>我的第一个标题</h1>\
12      <p id="first">我的第一个段落。</p>\
13  </body>\
14      <table border="r">\
15  <tr>\
16      <td>row1,cell 1</td>\
17      <td>row2,cell 2</td>\
18  </tr>\
19  </table>\
20  </html>'
21 m=re.findall('[\u4e00-\u9fa5]+',a)   #提取中文字符
22 s=BeautifulSoup(a)
23 print('autor:Yong No:10')
24 print(s.head)
25 print(s.body)
26 print(s.p)
27 print(m)

再来看看效果:

以上就是这两个库的一些介绍啦。

 

posted @ 2019-05-20 15:44  乘“疯”破浪  阅读(534)  评论(0编辑  收藏  举报