requests-bs4、selenium
1.bs4介绍、遍历文档树
beautifulsoup4可以从HTML或XML文件中提取数据的Python库,用它来解析爬取回来的xml。.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.你可能在寻找 Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发,官网推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4
安装
pip install beautifulsoup4
pip install lxml
1.美化:soup.prettify(),将标签格式美化
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title">
lqz
<b>The Dormouse's story</b>
</p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1" name='lqz'>Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
2.遍历文档树:soup.父标签名.body.子标签名(只拿到第一个)
soup = BeautifulSoup(html_doc,'lxml')
print(soup.html.body.p) # 查找html的子标签p标签
print(soup.p) # 直接跨层查找p标签
"""
以上两步执行结果都是:
<p class="title">
lqz
<b>The Dormouse's story</b>
</p>
"""
3.获取标签名称:
print(soup.a.name) # a
4.拿到标签内的属性:soup.标签名.attrs
print(soup.a.attrs) # {'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1', 'name': 'lqz'}
print(soup.a.attrs.get('class')) # ['sister']
5.拿到标签中的内容:如果里面还嵌套了标签,也会讲内部标签里面的内容拿出来(同名标签内部的内容无法拿到)
print(soup.p.text)
"""
lqz
The Dormouse's story
"""

soup.p.string:如果p下面嵌套了其他标签,无法取出内容
soup.p.strings:是一个生成器,只能拿到的第一个p标签的内容,会把里面带的标签全部转成字符串的格式:
print(soup.p.string) # None
print(list(soup.p.strings)) # ['\nlqz\n', "The Dormouse's story", '\n']
6.标签筛选:
print(soup.html.body)
# 筛选出body标签里面的内容
7.拿到html标签下所有子节点
print(soup.html.contents)

res = soup.html.children
# 拿到一个生成器对象,需要进行for循环才能拿到其中的值

8.获取子孙节点,p下所有的标签都会选择出来
print(soup.p.descendants)

9.父节点、祖先节点
print(soup.a.parent) #获取a标签的父节点
print(soup.a.parents) #找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲...
9.兄弟节点
print('=====>')
print(soup.a.next_sibling) #下一个兄弟
print(soup.a.previous_sibling) #上一个兄弟
print(list(soup.a.next_siblings)) #下面的兄弟们=>生成器对象
print(soup.a.previous_siblings) #上面的兄弟们=>生成器对象

浙公网安备 33010602011771号