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
"""

image
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)

image

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

image
8.获取子孙节点,p下所有的标签都会选择出来

print(soup.p.descendants)

image
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) #上面的兄弟们=>生成器对象
posted @ 2023-03-17 21:31  ERROR404Notfound  阅读(0)  评论(0)    收藏  举报
Title