python3中bs4的使用_Python3 bs4库BeautifulSoup爬虫网页解析入门

  • Post author:
  • Post category:python


一、4种BeautifulSoup库解析器:

BeautifulSoup解析器常配合网络爬虫解析返回的网页文档

1、bs4的HTML解析器:

安装bs4库:pip install bs4

解析用法:BeautifulSoup(mk,‘html.parser’)

2、lxml的HTML解析器:

安装lxml库:pip install lxml:

解析用法:BeautifulSoup(mk,‘lxml’)

3、lxml的XML解析器:

安装lxml库:pip install lxml:

解析用法:BeautifulSoup(mk,‘xml’)

4、html5lib的解析器:

安装html5lib库:pip install html5lib:

解析用法:BeautifulSoup(mk,‘html5lib’)

bs4库BeautifulSoup解析器解析页面示例:

#!/usr/bin/python

# coding = utf-8

from bs4 import BeautifulSoup

import requests

url = ‘https://blog.csdn.net/qq_43054896’

try:

r = requests.get(url)

r.raise_for_status()

# bs4库BeautifulSoup解析返回页面内容

soup = BeautifulSoup(r.text,’html.parser’)

except:

print(‘error’)

二、BeautifulSoup元素的5种基本属性

BeautifulSoup解析器以一对对的标签作为信息元素。

1、tag:标签,最基本的信息组织单元,<>和>标明开头和结尾

1、soup.find_all() 等价于 soup()

2、.find_all(…) 等价于 (…)

2、name:标签的名字,如 < p>…< /p> 的名字为 ‘p’ ,调用格式: p.name

3、attributes:标签属性,字典形式组织,调用格式:p.attrs

4、navigableString:标签内非属性字符串,如 < p>…< /p> 中的字符串,调用格式:p.string

5、comment:标签内字符串注释部分

标签基本属性调用实例:

#!/usr/bin/python

# coding = utf-8

from bs4 import BeautifulSoup

import requests

url = ‘https://blog.csdn.net/qq_43054896’

try:

r = requests.get(url)

r.raise_for_status()

soup = BeautifulSoup(r.text,’html.parser’)

tag = soup(‘a’)[0]

#第一个 ‘a’ 标签的3个基本属性

print(tag)

print(‘name:’, tag.name)

print(‘attributes:’, tag.attrs)

print(‘string:’, tag.string)

except:

print(‘error’)

运行结果:

20200322180129588.png

三、BeautifulSoup对标签树的3种遍历方式

soup = BeautifulSoup(r.text,’html.parser’)

1、下行遍历

所含属性:

(1)tag.contents:子节点列表,将< tag>的所有子节点存入此列表

soup.find(‘head’).contents

(2)tag.children:子节点迭代类型,与.contents类似,用于循环遍历子节点

soup.find(‘head’).children

(3)tag.descendants:子孙节点迭代类型,包含所有子孙节点,用于循环遍历

soup.find(‘head’).descendants

2、上行遍历

所含属性:

(1)tag.parent:节点父标签

soup.find(‘a’).parent

(2)tag.parents:节点先辈标签迭代类型,用于循环遍历先辈节点

soup.find(‘head’).parents

3、平行遍历(只允许在同一个父节点下进行平行遍历)

所含属性:

(1)tag.next_sibling:返回安装HTML文本顺序的下一个平行节点标签

soup.find(‘head’).next_sibling

(2)tag.next_siblings:迭代类型,返回按照HTML文本顺序的后续所有平行节点标签

soup.find(‘head’).next_siblings

(3)tag.previous_sibling:返回按照HTML文本顺序的上一个平行节点标签

soup.find(‘head’).previous_sibling

(4)tag.previous_siblings:迭代类型,返回按照HTML文本顺序的前续所有平行节点的标签

soup.find(‘head’).previous_siblings

四、BeautifulSoup信息检索与提取

soup = BeautifulSoup(r.text,’html.parser’)

soup.find_all(name, attrs, recursive, string, **kwargs)

1、检索方法的参数

(1)name:对标签名称的检索,为str类

soup.find_all(‘a’)

#或

soup.find_all(name =’a’)

(2)attrs:对标签属性值的检索,为str类

(3)recursive:是否对全部子孙检索,默认为True

(4)string:检索标签封装的字符串

soup.find_all(‘a’, string=’周里昂’)

(5)limit :限制返回结果的数量

soup.find_all(‘a’, string=’周里昂’,limit=2)

以下为标签中属性所对应的参数(attrs 键值对中,键单独成为一个参数):

(6)text :检索文档中的字符串内容,接受传值类型:字符串 、正则表达式 、列表、True

soup.find_all(‘a’,text=’周里昂’)

soup.find_all(‘a’,text=[‘周里昂’, ‘ctf’])

(7)id:标签的 ‘id’ 属性

soup.find_all(‘a’, id=’link1′)

(8) class_ :检索指定 CSS 类名的tag,接受传值类型:字符串 、正则表达式 、列表、True、方法

soup.find_all(‘a’, class_=’http://example.com’)

还有一些属性参数省略……

2、检索方法

(1)find_all():检索文档中的所有指定标签,返回一个 list

(2)find():检索指定标签且只返回一个结果,返回一个 str

(3)find_parent():在先辈节点中检索,返回一个 str

(4)find_parents():先辈节点中检索,返回一个 list

(5)find_next_sibling():在后续平行节点中检索,返回一个 str

(6)find_next_siblings():在后续平行节点中检索,返回一个 list

(7)find_previous_sibling():在前序平行节点中检索,返回一个 str

(8)find_previous_siblings():在前序平行节点中检索,返回一个 list