本节信息提取主要是介绍BeautifulSoup库
主要回答三个问题
BeautifulSoup库是干什么的、用于什么情况下、怎么用
1.BeautifulSoup 库是用于信息解析、提取的,比如从上节我们可以提取一个网页的内容了,但如何获取我想要的内容呢,这就要靠BS库了。
2.用于什么情况下:用在http页面内容下,即你已经有了一个http页面内容,已经通过requests库获取了页面内容下,要解析提取其中的内容了,就用它
3.怎么用:这是本节的主要内容
一、BeautifulSoup库
1.BeautifulSoup库是一个第三方库,由python语言编写,用于信息解析,包括解析html、xml等内容
其官方文档见链接(http://beautifulsoup.readthedocs.io/zh_CN/latest/)
或点击链接点击打开链接
2.BeautifulSoup库的安装用pip即可,同requests库的安装方法
3.BeautifulSoup库的功能
该库主要是解析、提取html等文档中的内容,其引用方式与requests库略有区别
from bs4 import BeautifulSoup
4.BeautifulSoup类的基本元素
5.BeautifulSoup库对内容的解析
以上节中requests库获得的内容为例,用BeauifulSoup库解析
上节通过requests库获得的内容如下:
有了这个内容后,我们要对其进行解析:代码如下:
import requests
from bs4 import BeautifulSoup
#首先用requests库获取网页内容
r=requests.get('http://www.baidu.com')
r.encoding=r.apparent_encoding
res=r.text
#用BS库解析网页内容
soup=BeautifulSoup(res,'html.parser')
#将内容输出
print(soup.prettify())
此处最后输出使用了prettify()方法,此方法可以将解析的内容格式化输出。如不用此方法,输出内容从结果看与r.text输出结果一致,其实背后完全不一样。r.text的内容非结构后,而soup的输出内容是BS类结构化内容,可以对其进行解析,提取需要的内容。
6.BS库对已获取的结构化内容的精确提取
信息提取用到的函数是最主要的是find_all()函数,用其可提取解析好的BS实例对象中的内容
find_all()的参数有(name,attrs,recursive,string,**kwarge),函数返回结果为列表
(1)name:用于查找标签名称的检索字符串
(2)attrs:用于查找属性值的检索字符串,并且能够对属性值进行标注
(3)recursive:用于判断是否检索子孙层级
(4)string:用于检索<>...</>中字符串区域内容的检索字符串
7.其使用方法的代码为
import requests
from bs4 import BeautifulSoup
#首先用requests库获取网页内容
r=requests.get('http://www.baidu.com')
r.encoding=r.apparent_encoding
res=r.text
#用BS库解析网页内容
soup=BeautifulSoup(res,'html.parser')
#标签名称检索,检索所有a标签
print('网页中所有a标签为:',soup.find_all('a'))
for tag in soup.find_all(True):
print('网页中所有标签名字为:',tag.name)
#标注属性值id=cp的属性值检索
print('所有id=cp的内容为:',soup.find_all(id='cp'))
#检索属性href
for link in soup.find_all('a'):
print('a标签中超链接为:',link.get('href'))
#检索字符串
for string in soup.strings:
print(string)
8.输出结果为
此处链接一个python函数repr():点击打开链接
二、robots协议
该协议全称为 Robots Exclusion Standard,机器人排除标准
从名称我们可以知道,这个协议是专门针对网络爬虫的,即用来规定哪些东西是网络爬虫不能做的
由于网络爬虫从网络获取的信息,因此涉及到知识产权的问题,所以使用网络爬虫要遵守该协议。同时该协议是建议性而非强制性,因此是以营利为目的的商业活动需特别注意,由于本人的博客教程不以营利为目的,以学习为目的,且访问方式与人操作相似,风险较小,但还是要特别尊重他人劳动成果,因此,在此特别声明,本人博客中涉及到的链接内容,产权归原作者所有,本人仅用于学习且不会用于任何商业行为,侵删。
下面言归正传,来继续说说robots协议
1.robots协议一般在网站的要目录下,比如百度的robots协议在http://www.baidu.com/robots.txt,送上链接点击打开链接
2.robots协议用法
user-agent:*,*代表所有,即对所有爬虫有效,有些网站对一些爬虫开放,比如百度对baiduspider开放,对其它限制
disallow:/,/代表根目录,即此目录下所有内容均不能访问
下面是baidu的robots协议部分截图,可以看出百度对baiduspider开放,但对baidu目录下的内容禁止爬虫爬取。