import requests
from bs4 import BeautifulSoup
r = requests.get(url = "https://www.csdn.net/") #获取网页信息
print(r)
print(r.text) #输出网页源代码
soup = BeautifulSoup(r.text,'lxml')
print(soup) #发现内容类似r.text
print('*****************')
print(type(soup)) #发现类型不再是r.text的str,而是一种bs4的树状类型
print(soup.prettify())
print(soup.title) #标题标签
print('***************************')
print(soup.head) #头部信息
print('***************************')
print(soup.body) #正文内容
print('***************************')
print(soup.a) #链接标签
print(soup.title.name)
print(soup.div.name)
print(type(soup.div.name)) #以str形式返回
print(soup.name) #较为特殊,树的顶层
print(soup.title.attrs)
print(soup.a.attrs)
print(soup.p.attrs)
print(type(soup.a.attrs)) #以字典形式返回
"""利用它的字典形式获取属性内容"""
print(soup.p.attrs['class'])
print(soup.title.string)
print(soup.a.string)
print(soup.p.string)
print(type(soup.title.string)) #
print(soup.title.string)
print(soup.title.text)
print(type(soup.title.string)) #string获取内容是可遍历字符串形式
print(type(soup.title.text)) #text获取内容只是文本str形式
print(soup.head.string) #string只能显示独立标签内容
print(soup.head.text) #text可以显示嵌套标签内容 #没有元素的标签区块空着
所有子孙节点用(.descendants)
print(soup.head.contents) #打印列表形式的内容
print(type(soup.head.contents)) #以一个列表返回
print('**********************')
print(type(soup.head.children)) #以一个生成器返回
for i in soup.head.children: #打印生成器内容
print(i)
print(type(soup.head.descendants))
for i in soup.head.descendants:
print(i)
""".parent"""
print(type(soup.title.parent)) #只取一个父节点,是节点类型
print(soup.title.parent) #直接打印上一节点所有内容
""".parents"""
print(type(soup.title.parents)) #取所有父节点,返回一个生成器,每一个生成器产生结果都是一个节点
for i in soup.title.parents: #打印生成器内容
print(i)
"""打印所有父节点标签名"""
for i in soup.title.parents:
print(i.name) #打印到document说明上面已经没有父节点了
print(soup.title.next_sibling)
print(soup.title.next_sibling.previous_sibling) #返回到下面又返回上去到自己
print(type(soup.p.next_sibling))
print(type(soup.p.next_sibling))
for i in soup.title.next_siblings: #输出下面所有兄弟节点组成的生成器
print(i)
print('*********************')
for i in soup.title.previous_siblings: #输出上面所有兄弟节点组成的生成器
print(i)
print(type(soup.div.next_element))
print(soup.div.next_element)
print(soup.div.previous_element)
for i in soup.div.next_elements: #用生成器打印所有后节点
print(i)
print('******************************')
for i in soup.div.previous_elements: #用生成器打印所有前节点
print(i)
print(soup.find_all('title')) #按标签查找 返回所有'title'内容
print(soup.find_all('meta')) #按标签查找 返回所有'meta'内容
print(type(soup.find_all('title'))) #返回的是一种bs4的列表形式
print(soup.find_all('img',"pre-img-lasy")) #按名称与属性内容查找,一般不用,而是选择keyword参数
print(soup.find_all('img',limit = 2)) #控制搜索量为2
"""通过属性的关键字来查找"""
soup.find_all('meta',content="IE=Edge") #其中content="IE=Edge"为属性内容关键字
"""查找所有含某一属性的来查找"""
soup.find_all('meta',content = True) #查找所有含content属性的标签内容
import re #导入re正则包
print(soup.find_all('a',limit = 5))
print('*******************************************')
print(soup.find_all('a',href = re.compile("/nav/engin"))) #查找属性中含关键词"/nav/engin"的内容
for i in soup.find_all('a',href = re.compile('/nav/')):#输出生成器
print(i.attrs['href']) #打印所有属性为href的内容
print('*******************************************')
for i in soup.find_all('a',href = re.compile('/nav/')):#输出生成器
print(i.string) #打印所有查询到的元素(bs4内部一种结构)
print('*******************************************')
for i in soup.find_all('a',href = re.compile('/nav/')):#输出生成器
print(i.text)
( 可以用find_all()中limit=1代替 )
print(soup.find('a'))
print(soup.find('div').find_all('li',limit = 2)) #使用find与find_all进行嵌套寻找
本文章所附带的Jupyter notebook文件中含有完整代码以及详细案例