from bs4 import BeautifulSoup
import bs4
2、简单讲,BeautifulSoup对应着一个HTML/XML文档的全部内容。
BeautifulSoup的基本元素有Tag、Name(格式:tag.name,标签的名字)、Attributes(格式:tag.attrs,常常是以字典形式组织的,相关内容不会在网页上显示出来)、NavigableString(格式:tag.string,标签内非属性字符串,<>…</>中字符串,相关内容会在网页上显示出来)、Comment(标签内字符串的注释部分,也是用tag.string提取出来)。
from bs4 import BeautifulSoup
import requests
url = "https://python123.io/ws/demo.html"
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
soup.a
Out[5]:
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
soup.p
Out[6]:
<p class="title"><b>The demo python introduces several python courses.</b></p>
可以直接使用soup.tagname 返回想要的:比如soup.a soup.p,如果有多个标签,则返回第一个。
3、下行遍历:
.contents 子节点的列表,将<tag>所有儿子节点存入列表;
.children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点;
.descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历。
4、上行遍历:
.parent 节点的父亲标签;
.parents 节点先辈标签的迭代类型,用于循环遍历先辈节点。
5、同辈遍历:
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签;
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签;
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签;
.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签。
6、prettify
.prettify()为HTML文本<>及其内容增加更加'\n'
.prettify()可用于标签,方法:<tag>.prettify(),这样可以方便地显示出来、有树形结构的东西。
7、XML:同HTML
JSON:有类型键值对
YAML:无类型键值对,用缩进来组织并列递进关系
8、爬虫提取信息的方式有两种:基于标签树组织结构的;基于文本搜索查找的
9、soup.find_all()函数:
<>.find_all(name, attrs, recursive, string, **kwargs)
其中name是对标签名称的检索字符串;attrs是对标签属性值的检索字符串,可标注属性检索;recursive: 是否对子孙全部检索,默认True;
string: <>…</>中字符串区域的检索字符串
10、衍生的find函数:
<>.find() 搜索且只返回一个结果,同.find_all()参数
<>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent() 在先辈节点中返回一个结果,同.find()参数
<>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling() 在后续平行节点中返回一个结果,同.find()参数
<>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling() 在前序平行节点中返回一个结果,同.find()参数