Beautiful Soup 是一个用于从HTML和XML文件中提取数据的Python库。它通过创建一个解析树来方便用户搜索和修改文档的内容。下面是Beautiful Soup的一些基本应用和解释:
lxml是解释器
使用的时候要实例化类beautifulsoup
然后在去使用你要提取的内容
遍历文档树
#BeautifulSoup遍历文档树
from bs4 import BeautifulSoup
import requests
import lxml
url = "https://d2.shopxo.vip/"
try:
response = requests.get(url)
except:
raise Exception("请求失败")
html_content = response.text
soup = BeautifulSoup(html_content, 'lxml')
# print(soup) #已经把整个html赋值给了soup,输出soup就是输出整个html文档
# print(soup.meta) #输出在soup中从上到下找到的第一个meta标签
# print(soup.children) #输出soup的子节点,是一个迭代器,可以用for循环遍历
# for child in soup.children:
# print(child)
# print(soup.title) #输出在soup中从上到下找到的第一个title标签
# print(soup.title.string) #输出title标签的儿子文本内容
# print(soup.title.text) #输出title标签的所有后代文本内容
# print(soup.head.string) #输出所有后代节点的文本内容
# print(soup.head.text) #由于没有儿子有文本内容,所以输出为空。
# print(soup.title.next_sibling) #输出title标签的下一个兄弟节点,这里是一个换行符,所以啥都没有
# print(repr(soup.title.next_sibling)) #repr()函数可以输出换行符的转义字符
# print(soup.title.previous_sibling) #输出title标签的上一个兄弟节点,这里是一个换行符,所以啥都没有
# print(repr(soup.title.previous_sibling))#输出上一个兄弟节点
# print(soup.title.next_sibling.next_sibling)#输出下一个兄弟节点的下一个兄弟节点
# print(soup.title.parent)#输出老爹
# print(soup.title.parents)#输出所有的祖先节点,是一个迭代器
# 这个for循环是在parents中是先找老爹,再找爷爷,再找曾祖父,一直到根节点document
# for parent in soup.title.parents:
# print(parent.name
搜索文档树
select() 方法:
select()
是 Beautiful Soup 提供的一个方法,用于通过CSS选择器选择元素。- CSS选择器是一种用于选择HTML元素的模式,常用于前端开发中的样式表(CSS)。
#搜索文档树
import requests
from bs4 import BeautifulSoup
url = "https://d2.shopxo.vip/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# # find方法
# #找到第一个class为category-list的ul标签。class有下换线是因为class是python的关键字,不能冲突
# # ul = soup.find("ul", class_="category-list")
# # print(ul)
# ul = soup.find("ul", {'class': 'category-list'})
# # print(ul)
# for item in ul.children:
# # print(repr(item)) #用repr()函数输出item的内容,用这个函数如果内容是换行符,输出\n
# if item != "\n":
# print(item.span.text)#item.span是找到item从上往下的后代中的第一个span标签
# # find_all方法,返回一个列表
# ul = soup.find("ul", class_="category-list")
# # lis = ul.find_all("li")
# # print(lis)
# spans = ul.find_all("span")
# for span in spans:
# print(span.text)
# select方法
# div = soup.select("ul.category-list")
# print(div)
# lis = soup.select("ul li.first")
# # print(lis)
# for li in lis:
# print(li.span.text)